ModiErogazioniApiHelper.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.core.config.rs.server.api.impl.erogazioni;

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

  25. import org.apache.commons.lang.StringUtils;
  26. import org.openspcoop2.core.commons.CoreException;
  27. import org.openspcoop2.core.config.rs.server.api.impl.ProtocolPropertiesHelper;
  28. import org.openspcoop2.core.config.rs.server.config.Startup;
  29. import org.openspcoop2.core.config.rs.server.model.BaseFruizioneModIOAuth;
  30. import org.openspcoop2.core.config.rs.server.model.BaseModIRichiestaInformazioniUtenteAudit;
  31. import org.openspcoop2.core.config.rs.server.model.Erogazione;
  32. import org.openspcoop2.core.config.rs.server.model.ErogazioneModI;
  33. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIInfoGenerali;
  34. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRest;
  35. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRichiesta;
  36. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRichiestaSicurezzaMessaggio;
  37. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRichiestaSicurezzaMessaggioContemporaneita;
  38. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRisposta;
  39. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRispostaSicurezzaMessaggio;
  40. import org.openspcoop2.core.config.rs.server.model.ErogazioneModIRestRispostaSicurezzaMessaggioContemporaneita;
  41. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISignalHub;
  42. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISoap;
  43. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISoapRichiesta;
  44. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISoapRichiestaSicurezzaMessaggio;
  45. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISoapRisposta;
  46. import org.openspcoop2.core.config.rs.server.model.ErogazioneModISoapRispostaSicurezzaMessaggio;
  47. import org.openspcoop2.core.config.rs.server.model.Fruizione;
  48. import org.openspcoop2.core.config.rs.server.model.FruizioneModI;
  49. import org.openspcoop2.core.config.rs.server.model.FruizioneModIOAuth;
  50. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRest;
  51. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRichiesta;
  52. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRichiestaSicurezzaMessaggio;
  53. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRichiestaSicurezzaMessaggioContemporaneita;
  54. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRisposta;
  55. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRispostaSicurezzaMessaggio;
  56. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRestRispostaSicurezzaMessaggioContemporaneita;
  57. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRichiestaInformazioneUtente;
  58. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRichiestaInformazioneUtenteAudit;
  59. import org.openspcoop2.core.config.rs.server.model.FruizioneModIRichiestaInformazioniUtenteAudit;
  60. import org.openspcoop2.core.config.rs.server.model.FruizioneModISoap;
  61. import org.openspcoop2.core.config.rs.server.model.FruizioneModISoapRichiesta;
  62. import org.openspcoop2.core.config.rs.server.model.FruizioneModISoapRichiestaSicurezzaMessaggio;
  63. import org.openspcoop2.core.config.rs.server.model.FruizioneModISoapRisposta;
  64. import org.openspcoop2.core.config.rs.server.model.FruizioneModISoapRispostaSicurezzaMessaggio;
  65. import org.openspcoop2.core.config.rs.server.model.ModIKeyStoreArchive;
  66. import org.openspcoop2.core.config.rs.server.model.ModIKeyStoreDefault;
  67. import org.openspcoop2.core.config.rs.server.model.ModIKeyStoreFile;
  68. import org.openspcoop2.core.config.rs.server.model.ModIKeyStoreHSM;
  69. import org.openspcoop2.core.config.rs.server.model.ModIKeyStoreRidefinito;
  70. import org.openspcoop2.core.config.rs.server.model.ModIKeystoreEnum;
  71. import org.openspcoop2.core.config.rs.server.model.ModIKeystoreTipologiaEnum;
  72. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioRestAlgoritmoFirma;
  73. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioRestRiferimentoX509;
  74. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioRestRiferimentoX509Risposta;
  75. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioRestSameDifferentEnum;
  76. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioRestTokenChoiseEnum;
  77. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioSoapAlgoritmoFirma;
  78. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioSoapFormaCanonicaXml;
  79. import org.openspcoop2.core.config.rs.server.model.ModISicurezzaMessaggioSoapRiferimentoX509;
  80. import org.openspcoop2.core.config.rs.server.model.ModITrustStoreDefault;
  81. import org.openspcoop2.core.config.rs.server.model.ModITrustStoreRidefinito;
  82. import org.openspcoop2.core.config.rs.server.model.ModITruststoreEnum;
  83. import org.openspcoop2.core.config.rs.server.model.OneOfErogazioneModIModi;
  84. import org.openspcoop2.core.config.rs.server.model.OneOfErogazioneModi;
  85. import org.openspcoop2.core.config.rs.server.model.OneOfFruizioneModIModi;
  86. import org.openspcoop2.core.config.rs.server.model.OneOfFruizioneModi;
  87. import org.openspcoop2.core.config.rs.server.model.StatoDefaultRidefinitoEnum;
  88. import org.openspcoop2.core.config.rs.server.model.TipoApiEnum;
  89. import org.openspcoop2.core.config.rs.server.model.TipoConfigurazioneFruizioneEnum;
  90. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  91. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  92. import org.openspcoop2.core.registry.Operation;
  93. import org.openspcoop2.core.registry.PortType;
  94. import org.openspcoop2.core.registry.ProtocolProperty;
  95. import org.openspcoop2.core.registry.Resource;
  96. import org.openspcoop2.core.registry.constants.FormatoSpecifica;
  97. import org.openspcoop2.core.registry.constants.ServiceBinding;
  98. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  99. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  100. import org.openspcoop2.protocol.modipa.config.ModIAuditClaimConfig;
  101. import org.openspcoop2.protocol.modipa.config.ModIAuditConfig;
  102. import org.openspcoop2.protocol.modipa.config.ModIProperties;
  103. import org.openspcoop2.protocol.modipa.constants.ModICostanti;
  104. import org.openspcoop2.protocol.sdk.properties.AbstractProperty;
  105. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  106. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesFactory;
  107. import org.openspcoop2.protocol.utils.ModIUtils;
  108. import org.openspcoop2.protocol.utils.ModISecurityUtils;
  109. import org.openspcoop2.utils.certificate.hsm.HSMUtils;
  110. import org.openspcoop2.utils.certificate.remote.RemoteStoreConfig;
  111. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  112. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;

  113. /**
  114.  * ModiErogazioniApiHelper
  115.  *
  116.  * @author $Author$
  117.  * @version $Rev$, $Date$
  118.  *
  119.  */
  120. public class ModiErogazioniApiHelper {

  121.     private static final String OPERAZIONE_UTILIZZABILE_SOLO_CON_MODI = "Operazione utilizzabile solamente con Profilo 'ModI'";
  122.     private static final String SPECIFICARE_CONFIGURAZIONE_MODI = "Specificare la configurazione 'ModI'";
  123.     private static final String IMPOSSIBILE_ABILITARE_SICUREZZA = "Impossibile abilitare la sicurezza messaggio, deve essere abilitata nella API implementata";
  124.     private static final String SICUREZZA_MESSAGGIO_NON_PRESENTE = "Per la seguente configurazione risultano necessari inseriri gli elementi di richiesta e risposta per la sicurezza messaggio";
  125.     private static final String SICUREZZA_MESSAGGIO_NON_NECESSARIA = "Per la seguente configurazione la sicurezza messaggio non risulta abilitata gli elementi di richiesta e risposta non devono essere presenti";
  126.     private static final String TIPO_TRUSTSTORE_PKCS11_NON_INDICATO = "Tipo truststore pks11 non indicato";
  127.     private static final String TIPO_TRUSTSTORE_PDND_NON_INDICATO = "Tipo truststore pdnd non indicato";
  128.     private static final String TIPO_TRUSTSTORE_PDND_SCONOSCIUTO_PREFIX = "Tipo truststore pdnd sconosciuto: ";
  129.     private static final String TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX = "Tipo truststore sconosciuto: ";
  130.     private static final String TIPO_TRUSTSTORE_NON_SUPPORTATO_SSL = "Truststore PDND non supportato con configurazione ssl";
  131.    
  132.     public static FruizioneModI getFruizioneModI(AccordoServizioParteSpecifica asps, ErogazioniEnv env, ProfiloEnum profilo, Map <String, AbstractProperty<?>> p) throws CoreException, DriverRegistroServiziNotFound, DriverRegistroServiziException {
  133.         if(profilo == null || (!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA))) {
  134.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.OPERAZIONE_UTILIZZABILE_SOLO_CON_MODI);
  135.         }

  136.         AccordoServizioParteComune aspc = ModiErogazioniApiHelper.getAccordoServizioParteComune(asps, env);
  137.         TipoApiEnum protocollo = ModiErogazioniApiHelper.getTipoApi(aspc);
  138.         String schemaAudit = ModiErogazioniApiHelper.getSchemaAudit(aspc, protocollo);

  139.         FruizioneModI fruizionemodi = new FruizioneModI();
  140.         if(p!= null) {

  141.             FruizioneModIOAuth oauth = ModiErogazioniApiHelper.getFruizioneModIOAuth(p, protocollo);
  142.             if(oauth!=null) {
  143.                 fruizionemodi.setModi(oauth);
  144.             }
  145.             else {
  146.                 if(protocollo.equals(TipoApiEnum.SOAP)) {
  147.                     fruizionemodi.setModi(ModiErogazioniApiHelper.getFruizioneModISoap(p, schemaAudit));
  148.                 } else {
  149.                     fruizionemodi.setModi(ModiErogazioniApiHelper.getFruizioneModIRest(p, schemaAudit));
  150.                 }
  151.             }
  152.         }
  153.        
  154.         return fruizionemodi;
  155.     }
  156.    
  157.     public static ErogazioneModI getErogazioneModi(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ErogazioniEnv env, ProfiloEnum profilo, Map <String, AbstractProperty<?>> p) throws CoreException, DriverRegistroServiziNotFound, DriverRegistroServiziException {
  158.         if(profilo == null || (!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA))) {
  159.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.OPERAZIONE_UTILIZZABILE_SOLO_CON_MODI);
  160.         }

  161.         TipoApiEnum protocollo = ModiErogazioniApiHelper.getTipoApi(asps, env);
  162.         ErogazioneModI erogazionemodi = new ErogazioneModI();
  163.         if(p!= null) {

  164.             if(protocollo.equals(TipoApiEnum.SOAP)) {
  165.                 erogazionemodi.setModi(ModiErogazioniApiHelper.getSOAPProperties(aspc, asps, p));
  166.             } else {
  167.                 erogazionemodi.setModi(ModiErogazioniApiHelper.getRestProperties(aspc, asps, p));
  168.             }
  169.         }
  170.        
  171.         return erogazionemodi;
  172.     }
  173.    
  174.     class ErogazioneConf {
  175.         TipoApiEnum protocollo;
  176.         boolean sicurezzaMessaggioAPIAbilitata;
  177.         boolean sicurezzaMessaggioHeaderDuplicatiAbilitato;
  178.     }
  179.    
  180.     class FruizioneConf extends ErogazioneConf {
  181.         boolean informazioniUtenteAbilitato;
  182.         String schemaAudit;
  183.     }
  184.    
  185.     private static boolean isSicurezzaMessaggioAbilitata(AccordoServizioParteComune aspc, String portType) {
  186.         List<String> valueAbilitato = new ArrayList<>();
  187.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM01);
  188.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM02);
  189.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0301);
  190.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0302);
  191.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0401);
  192.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0402);
  193.         return ModiErogazioniApiHelper.isAbilitataEngine(aspc, portType, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO, valueAbilitato, null);
  194.     }
  195.     private static boolean isSicurezzaMessaggioHeaderDuplicati(AccordoServizioParteComune aspc, String portType) {
  196.         if(!ServiceBinding.REST.equals(aspc.getServiceBinding())) {
  197.             return false;
  198.         }
  199.         List<String> valueAbilitato = new ArrayList<>();
  200.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA_AUTH_IN_RESPONSE);
  201.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA);
  202.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM_AUTH_IN_RESPONSE);
  203.         valueAbilitato.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM);
  204.         return ModiErogazioniApiHelper.isAbilitataEngine(aspc, portType, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER, valueAbilitato, null);
  205.     }
  206.     private static boolean isInfoUtenteAbilitato(AccordoServizioParteComune aspc, String portType) {
  207.         return ModiErogazioniApiHelper.isAbilitataEngine(aspc, portType, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA, null, true);
  208.     }
  209.     private static boolean isAbilitataEngine(AccordoServizioParteComune aspc, String portType, String pName, List<String> valueAbilitatoString, Boolean valueAbilitatoBoolean) {
  210.         if(aspc.getProtocolPropertyList()==null) {
  211.             return false;
  212.         }
  213.         String stringValue = null;
  214.         Boolean booleanValue = null;
  215.         for(ProtocolProperty p: aspc.getProtocolPropertyList()) {
  216.             if(p.getName().equals(pName)) {
  217.                 stringValue = p.getValue();
  218.                 booleanValue = p.getBooleanValue();
  219.                 break;
  220.             }
  221.         }
  222.         if(
  223.                 (valueAbilitatoString!=null && StringUtils.isNotEmpty(stringValue) && valueAbilitatoString.contains(stringValue))
  224.                 ||
  225.                 (valueAbilitatoBoolean!=null && booleanValue!=null && valueAbilitatoBoolean.booleanValue()==booleanValue.booleanValue())
  226.             ) {
  227.             return true;
  228.         }
  229.        
  230.         if(ServiceBinding.REST.equals(aspc.getServiceBinding()) && aspc.sizeResourceList()>0) {
  231.             for (Resource resource : aspc.getResourceList()) {
  232.                 stringValue = null;
  233.                 booleanValue = null;
  234.                 for(ProtocolProperty p: resource.getProtocolPropertyList()) {
  235.                     if(p.getName().equals(pName)) {
  236.                         stringValue = p.getValue();
  237.                         booleanValue = p.getBooleanValue();
  238.                         break;
  239.                     }
  240.                 }
  241.                 if(
  242.                         (valueAbilitatoString!=null && StringUtils.isNotEmpty(stringValue) && valueAbilitatoString.contains(stringValue))
  243.                         ||
  244.                         (valueAbilitatoBoolean!=null && booleanValue!=null && valueAbilitatoBoolean.booleanValue()==booleanValue.booleanValue())
  245.                     ) {
  246.                     return true;
  247.                 }
  248.             }
  249.         }
  250.         else {
  251.             if(portType!=null && aspc.sizePortTypeList()>0) {
  252.                 PortType pt = null;
  253.                 for (PortType ptCheck : aspc.getPortTypeList()) {
  254.                     if(portType.equals(ptCheck.getNome())) {
  255.                         pt = ptCheck;
  256.                         break;
  257.                     }
  258.                 }
  259.                 if(pt!=null && pt.sizeAzioneList()>0) {
  260.                     for (Operation op : pt.getAzioneList()) {
  261.                         stringValue = null;
  262.                         booleanValue = null;
  263.                         for(ProtocolProperty p: op.getProtocolPropertyList()) {
  264.                             if(p.getName().equals(pName)) {
  265.                                 stringValue = p.getValue();
  266.                                 booleanValue = p.getBooleanValue();
  267.                                 break;
  268.                             }
  269.                         }
  270.                         if(
  271.                                 (valueAbilitatoString!=null && StringUtils.isNotEmpty(stringValue) && valueAbilitatoString.contains(stringValue))
  272.                                 ||
  273.                                 (valueAbilitatoBoolean!=null && booleanValue!=null && valueAbilitatoBoolean.booleanValue()==booleanValue.booleanValue())
  274.                             ) {
  275.                             return true;
  276.                         }
  277.                     }
  278.                 }
  279.             }
  280.         }
  281.        
  282.         return false;
  283.     }
  284.    
  285.    
  286.     private static ErogazioneConf getErogazioneConf(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  287.        
  288.         ErogazioneConf c = new ModiErogazioniApiHelper(). new ErogazioneConf();
  289.        
  290.         AccordoServizioParteComune aspc = env.apcCore.getAccordoServizioFull(asps.getIdAccordo());
  291.         c.sicurezzaMessaggioAPIAbilitata = ModiErogazioniApiHelper.isSicurezzaMessaggioAbilitata(aspc, asps.getPortType());
  292.         c.sicurezzaMessaggioHeaderDuplicatiAbilitato = ModiErogazioniApiHelper.isSicurezzaMessaggioHeaderDuplicati(aspc, asps.getPortType());
  293.        
  294.         c.protocollo = ModiErogazioniApiHelper.getTipoApi(aspc);
  295.        
  296.         return c;
  297.     }
  298.    
  299.     private static FruizioneConf getFruizioneConf(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  300.        
  301.         FruizioneConf c = new ModiErogazioniApiHelper(). new FruizioneConf();
  302.        
  303.         AccordoServizioParteComune aspc = env.apcCore.getAccordoServizioFull(asps.getIdAccordo());
  304.         c.sicurezzaMessaggioAPIAbilitata = ModiErogazioniApiHelper.isSicurezzaMessaggioAbilitata(aspc, asps.getPortType());
  305.         c.sicurezzaMessaggioHeaderDuplicatiAbilitato = ModiErogazioniApiHelper.isSicurezzaMessaggioHeaderDuplicati(aspc, asps.getPortType());
  306.         c.informazioniUtenteAbilitato= ModiErogazioniApiHelper.isInfoUtenteAbilitato(aspc, asps.getPortType());
  307.        
  308.         c.protocollo = ModiErogazioniApiHelper.getTipoApi(aspc);
  309.         c.schemaAudit = ModiErogazioniApiHelper.getSchemaAudit(aspc, c.protocollo);
  310.        
  311.         return c;
  312.     }
  313.    
  314.     private static TipoApiEnum getTipoApi(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  315.         AccordoServizioParteComune aspc = env.apcCore.getAccordoServizioFull(asps.getIdAccordo());
  316.         return ModiErogazioniApiHelper.getTipoApi(aspc);
  317.     }
  318.     private static TipoApiEnum getTipoApi(AccordoServizioParteComune aspc) {
  319.         return aspc.getFormatoSpecifica().equals(FormatoSpecifica.WSDL_11) ? TipoApiEnum.SOAP: TipoApiEnum.REST;
  320.     }
  321.     private static String getSchemaAudit(AccordoServizioParteComune aspc, TipoApiEnum tipoApi){
  322.         // prendo la prima che trovo: sull'API non è possibile impostare uno schema differente
  323.         if(aspc!=null && aspc.sizeProtocolPropertyList()>0) {
  324.             String s = ModiErogazioniApiHelper.getSchemaAudit(aspc.getProtocolPropertyList());
  325.             if(s!=null) {
  326.                 return s;
  327.             }
  328.         }
  329.         if(TipoApiEnum.REST.equals(tipoApi)) {
  330.             return ModiErogazioniApiHelper.getSchemaAuditRest(aspc);
  331.         }
  332.         else {
  333.             return ModiErogazioniApiHelper.getSchemaAuditSoap(aspc);
  334.         }
  335.     }
  336.     private static String getSchemaAuditRest(AccordoServizioParteComune aspc){
  337.         if(aspc!=null && aspc.sizeResourceList()>0) {
  338.             for (Resource r: aspc.getResourceList()) {
  339.                 if(r!=null && r.sizeProtocolPropertyList()>0) {
  340.                     String s = ModiErogazioniApiHelper.getSchemaAudit(r.getProtocolPropertyList());
  341.                     if(s!=null) {
  342.                         return s;
  343.                     }
  344.                 }
  345.             }
  346.         }
  347.         return null;
  348.     }
  349.     private static String getSchemaAuditSoap(AccordoServizioParteComune aspc){
  350.         if(aspc!=null && aspc.sizePortTypeList()>0) {
  351.             for (PortType pt: aspc.getPortTypeList()) {
  352.                 if(pt!=null && pt.sizeAzioneList()>0) {
  353.                     String s = ModiErogazioniApiHelper.getSchemaAuditSoap(pt.getAzioneList());
  354.                     if(s!=null) {
  355.                         return s;
  356.                     }
  357.                 }
  358.             }
  359.         }
  360.         return null;
  361.     }
  362.     private static String getSchemaAuditSoap(List<Operation> operation){
  363.         if(operation!=null && !operation.isEmpty()) {
  364.             for (Operation op: operation) {
  365.                 if(op!=null && op.sizeProtocolPropertyList()>0) {
  366.                     String s = ModiErogazioniApiHelper.getSchemaAudit(op.getProtocolPropertyList());
  367.                     if(s!=null) {
  368.                         return s;
  369.                     }
  370.                 }
  371.             }
  372.         }
  373.         return null;
  374.     }
  375.     private static String getSchemaAudit(List<ProtocolProperty> ppList) {
  376.         if(ppList!=null && !ppList.isEmpty()) {
  377.             for (ProtocolProperty pp : ppList) {
  378.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA.equals(pp.getName()) && pp.getValue()!=null && StringUtils.isNotEmpty(pp.getValue())) {
  379.                     return pp.getValue();
  380.                 }
  381.             }
  382.         }
  383.         return null;
  384.     }
  385.     private static AccordoServizioParteComune getAccordoServizioParteComune(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  386.         return env.apcCore.getAccordoServizioFull(asps.getIdAccordo());
  387.     }
  388.    
  389.     private static ErogazioneModISoapRichiesta getErogazioneSOAPRichiesta(Map<String, AbstractProperty<?>> p) throws CoreException {
  390.         ErogazioneModISoapRichiesta richiesta = new ErogazioneModISoapRichiesta();
  391.         ErogazioneModISoapRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = new ErogazioneModISoapRichiestaSicurezzaMessaggio();
  392.        
  393.         String truststoreMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, true);
  394.         if(truststoreMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  395.             ModITrustStoreDefault truststore = new ModITrustStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  396.             sicurezzaMessaggioRichiesta.setTruststore(truststore);
  397.         } else {
  398.             ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  399.            
  400.             truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, true));
  401.             truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, false));
  402.             ModITruststoreEnum tipo = null;
  403.             String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, true);
  404.             if(HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  405.                 tipo = ModITruststoreEnum.PKCS11;
  406.                 truststore.setPcks11Tipo(truststoreTipoString);
  407.             }
  408.             else if(isModITrustStore(truststoreTipoString)) {
  409.                 tipo = ModITruststoreEnum.PDND;
  410.                 truststore.setPdndTipo(truststoreTipoString);
  411.             }
  412.             else {
  413.                 if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS)) {
  414.                     tipo = ModITruststoreEnum.JKS;
  415.                 }
  416.             }
  417.             truststore.setTruststoreTipo(tipo);
  418.             truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, true));
  419.             truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, true));
  420.             sicurezzaMessaggioRichiesta.setTruststore(truststore);
  421.         }
  422.        
  423.         String iatMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT, false);
  424.         if(StringUtils.isNotEmpty(iatMode) && ModICostanti.MODIPA_PROFILO_RIDEFINISCI.equals(iatMode)) {
  425.             sicurezzaMessaggioRichiesta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT_SECONDS, false));
  426.         }
  427.        
  428.         String wsaTo = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, false);
  429.         if(wsaTo != null) {
  430.             sicurezzaMessaggioRichiesta.setWsaTo(wsaTo);
  431.         }
  432.        
  433.         // audit
  434.        
  435.         BaseModIRichiestaInformazioniUtenteAudit audit = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, false);
  436.         if(audit!=null) {
  437.             sicurezzaMessaggioRichiesta.setAudit(audit);
  438.         }
  439.        
  440.         richiesta.setSicurezzaMessaggio(sicurezzaMessaggioRichiesta);
  441.         return richiesta;
  442.     }
  443.    
  444.     private static ErogazioneModISoapRisposta getErogazioneSOAPRisposta(Map<String, AbstractProperty<?>> p) throws CoreException {
  445.        
  446.         ErogazioneModISoapRisposta risposta = new ErogazioneModISoapRisposta();
  447.         ErogazioneModISoapRispostaSicurezzaMessaggio sicurezzaMessaggio = new ErogazioneModISoapRispostaSicurezzaMessaggio();
  448.        
  449.         ModISicurezzaMessaggioSoapAlgoritmoFirma algo = null;
  450.         String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_ALG, true);
  451.         if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_DSA_SHA_256)) {
  452.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.DSA_SHA_256;
  453.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256)) {
  454.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_256;
  455.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_384)) {
  456.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_384;
  457.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_512)) {
  458.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_512;
  459.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_256)) {
  460.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_256;
  461.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_384)) {
  462.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_384;
  463.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_512)) {
  464.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_512;
  465.         }
  466.         sicurezzaMessaggio.setAlgoritmo(algo);
  467.        
  468.         ModISicurezzaMessaggioSoapFormaCanonicaXml canonic = null;
  469.         String canonicString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_CANONICALIZATION_ALG, true);
  470.         if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_10)) {
  471.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.CANONICAL_XML_10;
  472.         } else if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_11)) {
  473.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.CANONICAL_XML_11;
  474.         } else if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10)) {
  475.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.EXCLUSIVE_CANONICAL_XML_10;
  476.         }
  477.         sicurezzaMessaggio.setFormaCanonicaXml(canonic);
  478.        
  479.         String headersString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP, false);
  480.         if(headersString!=null) {
  481.             List<String> headers = new ArrayList<>();
  482.             String[] headersplit = headersString.split("\n");
  483.             if(headersplit!=null && headersplit.length>0) {
  484.                 headers.addAll(Arrays.asList(headersplit));
  485.             }
  486.             sicurezzaMessaggio.setHeaderSoapFirmare(headers);
  487.         }
  488.        
  489.         ModISicurezzaMessaggioSoapRiferimentoX509 rif509 = null;
  490.         String rif509String = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509, true);
  491.         if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN)) {
  492.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.BINARY_SECURITY_TOKEN;
  493.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_SECURITY_TOKEN_REFERENCE)) {
  494.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.ISSUER_SERIAL_SECURITY_TOKEN_REFERENCE;
  495.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_SKI)) {
  496.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.SKI_KEY_IDENTIFIER;
  497.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_THUMBPRINT)) {
  498.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.THUMBPRINT_KEY_IDENTIFIER;
  499.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_X509)) {
  500.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.X509_KEY_IDENTIFIER;
  501.         }
  502.         sicurezzaMessaggio.setRiferimentoX509(rif509);
  503.        
  504.         sicurezzaMessaggio.setCertificateChain(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN, true));
  505.         sicurezzaMessaggio.setIncludiSignatureToken(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN, true));

  506.         sicurezzaMessaggio.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED, true));
  507.        
  508.         String keystoreTypeString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, true);
  509.         if(keystoreTypeString.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  510.            
  511.             ModIKeyStoreDefault ks = new ModIKeyStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  512.             sicurezzaMessaggio.setKeystore(ks);
  513.         } else {
  514.            
  515.             ModIKeyStoreRidefinito ks = ModiErogazioniApiHelper.readKeystoreRidefinito(p);
  516.             sicurezzaMessaggio.setKeystore(ks);
  517.         }
  518.        
  519.         risposta.setSicurezzaMessaggio(sicurezzaMessaggio);
  520.        
  521.         return risposta;
  522.     }
  523.    
  524.     private static ErogazioneModISoap getSOAPProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, Map<String, AbstractProperty<?>> p) throws CoreException {

  525.         ErogazioneModISoap modi = new ErogazioneModISoap();
  526.         modi.setProtocollo(TipoApiEnum.SOAP);
  527.        
  528.         if (ModISecurityUtils.isSicurezzaMessaggioRequired(aspc, asps.getPortType())) {
  529.             // *** richiesta ***
  530.             modi.setRichiesta(ModiErogazioniApiHelper.getErogazioneSOAPRichiesta(p));
  531.            
  532.             // *** risposta ***
  533.             modi.setRisposta(ModiErogazioniApiHelper.getErogazioneSOAPRisposta(p));
  534.         }
  535.         modi.setInformazioniGenerali(ModiErogazioniApiHelper.getErogazioneModIInfoGenerali(p));
  536.        
  537.         return modi;
  538.     }
  539.    
  540.     private static ModIKeyStoreRidefinito readKeystoreRidefinito(Map<String, AbstractProperty<?>> p) throws CoreException {
  541.        
  542.         ModIKeyStoreRidefinito ks = new ModIKeyStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  543.        
  544.         String keystoreModeString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_MODE, true);

  545.         if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_HSM)) {
  546.             ModIKeyStoreHSM datiKeystore = new ModIKeyStoreHSM().tipologia(ModIKeystoreTipologiaEnum.HSM);

  547.             String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);
  548.             datiKeystore.setPcks11Tipo(keystoreTipoString);
  549.             datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  550.            
  551.             ks.setDatiKeystore(datiKeystore);
  552.         }
  553.         else if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_PATH)) {
  554.             ModIKeyStoreFile datiKeystore = new ModIKeyStoreFile().tipologia(ModIKeystoreTipologiaEnum.FILESYSTEM);

  555.             ModIKeystoreEnum keystoreTipo = null;

  556.             String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);

  557.             if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS)) {
  558.                 keystoreTipo = ModIKeystoreEnum.JKS;
  559.             } else if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12)) {
  560.                 keystoreTipo = ModIKeystoreEnum.PKCS12;
  561.             }

  562.             datiKeystore.setKeystoreTipo(keystoreTipo);
  563.             datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  564.             datiKeystore.setKeyPassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_PASSWORD, true));
  565.             datiKeystore.setKeystorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PASSWORD, true));
  566.             datiKeystore.setKeystorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PATH, true));
  567.             datiKeystore.setKeystoreByokPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, false));

  568.             ks.setDatiKeystore(datiKeystore);
  569.         } else if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE)) {
  570.             ModIKeyStoreArchive datiKeystore = new ModIKeyStoreArchive().tipologia(ModIKeystoreTipologiaEnum.ARCHIVIO);

  571.             ModIKeystoreEnum keystoreTipo = null;

  572.             String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);

  573.             if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS)) {
  574.                 keystoreTipo = ModIKeystoreEnum.JKS;
  575.             } else if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12)) {
  576.                 keystoreTipo = ModIKeystoreEnum.PKCS12;
  577.             }

  578.             datiKeystore.setKeystoreTipo(keystoreTipo);
  579.             datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  580.             datiKeystore.setKeyPassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_PASSWORD, true));
  581.             datiKeystore.setKeystorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PASSWORD, true));
  582.             datiKeystore.setKeystoreArchivio(ProtocolPropertiesHelper.getByteArrayProperty(p, ModICostanti.MODIPA_KEYSTORE_ARCHIVE, true));

  583.             ks.setDatiKeystore(datiKeystore);
  584.         }
  585.        
  586.         return ks;
  587.        
  588.     }

  589.     private static ErogazioneModIRestRichiesta getErogazioneRestRichiesta(Map<String, AbstractProperty<?>> p) throws CoreException {
  590.         // *** richiesta ***

  591.         ErogazioneModIRestRichiesta richiesta = new ErogazioneModIRestRichiesta();
  592.         ErogazioneModIRestRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = new ErogazioneModIRestRichiestaSicurezzaMessaggio();

  593.         sicurezzaMessaggioRichiesta.setRiferimentoX509(ModiErogazioniApiHelper.getX509(ProtocolPropertiesHelper.getStringProperty(p,
  594.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509, true)));

  595.         String truststoreMode = ProtocolPropertiesHelper.getStringProperty(p,
  596.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, true);
  597.         if (truststoreMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  598.             ModITrustStoreDefault truststore = new ModITrustStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  599.             sicurezzaMessaggioRichiesta.setTruststore(truststore);
  600.         } else {
  601.             ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito()
  602.                     .modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);

  603.             truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p,
  604.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, true));
  605.             truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p,
  606.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, false));
  607.             ModITruststoreEnum tipo = null;
  608.             String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p,
  609.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, true);
  610.             if (HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  611.                 tipo = ModITruststoreEnum.PKCS11;
  612.                 truststore.setPcks11Tipo(truststoreTipoString);
  613.             }
  614.             else if(isModITrustStore(truststoreTipoString)) {
  615.                 tipo = ModITruststoreEnum.PDND;
  616.                 truststore.setPdndTipo(truststoreTipoString);
  617.             }
  618.             else {
  619.                 if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE_VALUE_JKS)) {
  620.                     tipo = ModITruststoreEnum.JKS;
  621.                 }
  622.             }
  623.             truststore.setTruststoreTipo(tipo);
  624.             truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p,
  625.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, true));
  626.             truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p,
  627.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, true));
  628.             sicurezzaMessaggioRichiesta.setTruststore(truststore);
  629.         }

  630.         String truststoreSSLMode = ProtocolPropertiesHelper.getStringProperty(p,
  631.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, false);
  632.         if (truststoreSSLMode != null) {
  633.             if (truststoreSSLMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  634.                 ModITrustStoreDefault truststore = new ModITrustStoreDefault()
  635.                         .modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  636.                 sicurezzaMessaggioRichiesta.setTruststoreSsl(truststore);
  637.             } else {
  638.                 ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito()
  639.                         .modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);

  640.                 truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p,
  641.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, true));
  642.                 truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p,
  643.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, false));
  644.                 ModITruststoreEnum tipo = null;
  645.                 String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p,
  646.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, true);
  647.                 if (HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  648.                     tipo = ModITruststoreEnum.PKCS11;
  649.                     truststore.setPcks11Tipo(truststoreTipoString);
  650.                 }
  651.                 /** SU SSL NON HA SENSO else if(isModITrustStore(truststoreTipoString)) {
  652.                     tipo = ModITruststoreEnum.PDND;
  653.                     truststore.setPdndTipo(truststoreTipoString);
  654.                 }*/
  655.                 else {
  656.                     if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS)) {
  657.                         tipo = ModITruststoreEnum.JKS;
  658.                     }
  659.                 }
  660.                 truststore.setTruststoreTipo(tipo);
  661.                 truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p,
  662.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, true));
  663.                 truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p,
  664.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, true));
  665.                 sicurezzaMessaggioRichiesta.setTruststoreSsl(truststore);
  666.             }
  667.         }

  668.         String iatMode = ProtocolPropertiesHelper.getStringProperty(p,
  669.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT, false);
  670.         if (StringUtils.isNotEmpty(iatMode) && ModICostanti.MODIPA_PROFILO_RIDEFINISCI.equals(iatMode)) {
  671.             sicurezzaMessaggioRichiesta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p,
  672.                     ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT_SECONDS, false));
  673.         }

  674.         sicurezzaMessaggioRichiesta.setAudience(ProtocolPropertiesHelper.getStringProperty(p,
  675.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, false));

  676.         // contemporaneita'

  677.         String idJtiRichiesta = ProtocolPropertiesHelper.getStringProperty(p,
  678.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI, false);
  679.         String audienceRichiesta = ProtocolPropertiesHelper.getStringProperty(p,
  680.                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE, false);
  681.         if (StringUtils.isNotEmpty(idJtiRichiesta) || StringUtils.isNotEmpty(audienceRichiesta)) {

  682.             ErogazioneModIRestRichiestaSicurezzaMessaggioContemporaneita richiestaContemporaneita = new ErogazioneModIRestRichiestaSicurezzaMessaggioContemporaneita();

  683.             if (StringUtils.isNotEmpty(idJtiRichiesta)) {
  684.                 if (ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_AUTHORIZATION
  685.                         .equals(idJtiRichiesta)) {
  686.                     richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.BEARER);
  687.                 } else if (ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_MODI
  688.                         .equals(idJtiRichiesta)) {
  689.                     richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID);
  690.                 }
  691.             }
  692.             if (richiestaContemporaneita.getIdentificativo() == null) {
  693.                 richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID); // default
  694.             }

  695.             if (StringUtils.isNotEmpty(audienceRichiesta)) {
  696.                 if (ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME
  697.                         .equals(audienceRichiesta)) {
  698.                     richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME);
  699.                 } else if (ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT
  700.                         .equals(audienceRichiesta)) {
  701.                     richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT);
  702.                 }
  703.             }
  704.             if (richiestaContemporaneita.getAudience() == null) {
  705.                 richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME); // default
  706.             }
  707.             if (ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(richiestaContemporaneita.getAudience())) {
  708.                 String audienceAtteso = ProtocolPropertiesHelper.getStringProperty(p,
  709.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY,
  710.                         false);
  711.                 richiestaContemporaneita.setAudienceAtteso(audienceAtteso);
  712.             }

  713.             sicurezzaMessaggioRichiesta.setContemporaneita(richiestaContemporaneita);
  714.         }

  715.         // audit

  716.         BaseModIRichiestaInformazioniUtenteAudit audit = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, false);
  717.         if (audit != null) {
  718.             sicurezzaMessaggioRichiesta.setAudit(audit);
  719.         }

  720.         richiesta.setSicurezzaMessaggio(sicurezzaMessaggioRichiesta);
  721.         return richiesta;
  722.                    
  723.     }
  724.    
  725.     private static ErogazioneModIRestRisposta getErogazioneRestRisposta(Map<String, AbstractProperty<?>> p) throws CoreException {
  726.         ErogazioneModIRestRisposta risposta = new ErogazioneModIRestRisposta();
  727.         ErogazioneModIRestRispostaSicurezzaMessaggio sicurezzaMessaggio = new ErogazioneModIRestRispostaSicurezzaMessaggio();
  728.        
  729.         ModISicurezzaMessaggioRestAlgoritmoFirma algo = null;
  730.         String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_ALG, true);
  731.         if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES256)) {
  732.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES256;
  733.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES384)) {
  734.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES384;
  735.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES512)) {
  736.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES512;
  737.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256)) {
  738.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS256;
  739.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS384)) {
  740.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS384;
  741.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS512)) {
  742.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS512;
  743.         }
  744.         sicurezzaMessaggio.setAlgoritmo(algo);
  745.        
  746.         String headersString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, false);
  747.         if(headersString!=null) {
  748.             List<String> headers = new ArrayList<>();
  749.             String[] headersplit = headersString.split(",");
  750.             if(headersplit!=null && headersplit.length>0) {
  751.                 headers.addAll(Arrays.asList(headersplit));
  752.             }
  753.             sicurezzaMessaggio.setHeaderHttpFirmare(headers);
  754.         }
  755.        
  756.         if(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, true).equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_TRUE)){
  757.             sicurezzaMessaggio.setRiferimentoX509(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RICHIESTA);
  758.         } else {
  759.             sicurezzaMessaggio.setRiferimentoX509(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RIDEFINITO);
  760.             sicurezzaMessaggio.setRiferimentoX509Risposta(ModiErogazioniApiHelper.getX509(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509, true)));
  761.         }
  762.        
  763.         sicurezzaMessaggio.setCertificateChain(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN, true));
  764.        
  765.         sicurezzaMessaggio.setUrl(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_X509_VALUE_X5URL, false));
  766.        
  767.         sicurezzaMessaggio.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED, true));
  768.        
  769.         String pString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_JWT_CLAIMS, false);
  770.         if(pString!=null) {
  771.             List<String> proprieta = new ArrayList<>();
  772.             String[] psplit = pString.split("\n");
  773.             if(psplit!=null && psplit.length>0) {
  774.                 proprieta.addAll(Arrays.asList(psplit));
  775.             }
  776.             sicurezzaMessaggio.setClaims(proprieta);
  777.         }
  778.        
  779.         String keystoreTypeString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, true);
  780.         if(keystoreTypeString.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  781.            
  782.             ModIKeyStoreDefault ks = new ModIKeyStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  783.             sicurezzaMessaggio.setKeystore(ks);
  784.         } else {
  785.            
  786.             ModIKeyStoreRidefinito ks = new ModIKeyStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  787.            
  788.             String keystoreModeString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_MODE, true);

  789.             if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_HSM)) {
  790.                 ModIKeyStoreHSM datiKeystore = new ModIKeyStoreHSM().tipologia(ModIKeystoreTipologiaEnum.HSM);

  791.                 String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);
  792.                 datiKeystore.setPcks11Tipo(keystoreTipoString);
  793.                 datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  794.                
  795.                 ks.setDatiKeystore(datiKeystore);
  796.             }
  797.             else if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_PATH)) {
  798.                 ModIKeyStoreFile datiKeystore = new ModIKeyStoreFile().tipologia(ModIKeystoreTipologiaEnum.FILESYSTEM);

  799.                 ModIKeystoreEnum keystoreTipo = null;

  800.                 String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);

  801.                 if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS)) {
  802.                     keystoreTipo = ModIKeystoreEnum.JKS;
  803.                 } else if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12)) {
  804.                     keystoreTipo = ModIKeystoreEnum.PKCS12;
  805.                 }

  806.                 datiKeystore.setKeystoreTipo(keystoreTipo);
  807.                 datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  808.                 datiKeystore.setKeyPassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_PASSWORD, true));
  809.                 datiKeystore.setKeystorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PASSWORD, true));
  810.                 datiKeystore.setKeystorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PATH, true));
  811.                 datiKeystore.setKeystoreByokPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, false));

  812.                 ks.setDatiKeystore(datiKeystore);
  813.             } else if(keystoreModeString.equals(ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE)) {
  814.                 ModIKeyStoreArchive datiKeystore = new ModIKeyStoreArchive().tipologia(ModIKeystoreTipologiaEnum.ARCHIVIO);

  815.                 ModIKeystoreEnum keystoreTipo = null;

  816.                 String keystoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_TYPE, true);

  817.                 if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS)) {
  818.                     keystoreTipo = ModIKeystoreEnum.JKS;
  819.                 } else if(keystoreTipoString.equals(ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12)) {
  820.                     keystoreTipo = ModIKeystoreEnum.PKCS12;
  821.                 }

  822.                 datiKeystore.setKeystoreTipo(keystoreTipo);
  823.                 datiKeystore.setKeyAlias(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_ALIAS, true));
  824.                 datiKeystore.setKeyPassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEY_PASSWORD, true));
  825.                 datiKeystore.setKeystorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_KEYSTORE_PASSWORD, true));
  826.                 datiKeystore.setKeystoreArchivio(ProtocolPropertiesHelper.getByteArrayProperty(p, ModICostanti.MODIPA_KEYSTORE_ARCHIVE, true));

  827.                 ks.setDatiKeystore(datiKeystore);
  828.             }
  829.            
  830.             sicurezzaMessaggio.setKeystore(ks);
  831.         }
  832.        
  833.        
  834.         // contemporaneita'
  835.        
  836.         String idJtiRisposta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI, false);
  837.         String claimsAuthRisposta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION, false);
  838.         String claimsModiRisposta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JWT_CLAIMS_MODI, false);
  839.         if(StringUtils.isNotEmpty(idJtiRisposta) ||
  840.                 StringUtils.isNotEmpty(claimsAuthRisposta)  || StringUtils.isNotEmpty(claimsModiRisposta) ) {
  841.             ErogazioneModIRestRispostaSicurezzaMessaggioContemporaneita rispostaContemporaneita = new ErogazioneModIRestRispostaSicurezzaMessaggioContemporaneita();
  842.            
  843.             if(StringUtils.isNotEmpty(idJtiRisposta)) {
  844.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_VALUE_SAME.equals(idJtiRisposta)) {
  845.                     rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.SAME);
  846.                 }
  847.                 else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_VALUE_DIFFERENT.equals(idJtiRisposta)) {
  848.                     rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT);
  849.                 }
  850.             }
  851.             if(rispostaContemporaneita.getIdentificativo()==null) {
  852.                 rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.SAME); // default
  853.             }
  854.             if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(rispostaContemporaneita.getIdentificativo())) {
  855.                 String idJtiAsIdMessaggio = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO, false);
  856.                 if(StringUtils.isNotEmpty(idJtiAsIdMessaggio)) {
  857.                     if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_AUTHORIZATION.equals(idJtiAsIdMessaggio)) {
  858.                         rispostaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.BEARER);
  859.                     }
  860.                     else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_MODI.equals(idJtiAsIdMessaggio)) {
  861.                         rispostaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID);
  862.                     }
  863.                 }
  864.                 if(rispostaContemporaneita.getUsaComeIdMessaggio()==null) {
  865.                     rispostaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID); // default
  866.                 }
  867.             }
  868.            
  869.             if(claimsAuthRisposta!=null) {
  870.                 List<String> proprieta = new ArrayList<>();
  871.                 String[] psplit = claimsAuthRisposta.split("\n");
  872.                 if(psplit!=null && psplit.length>0) {
  873.                     proprieta.addAll(Arrays.asList(psplit));
  874.                 }
  875.                 rispostaContemporaneita.setClaimsBearer(proprieta);
  876.             }
  877.             if(claimsModiRisposta!=null) {
  878.                 List<String> proprieta = new ArrayList<>();
  879.                 String[] psplit = claimsModiRisposta.split("\n");
  880.                 if(psplit!=null && psplit.length>0) {
  881.                     proprieta.addAll(Arrays.asList(psplit));
  882.                 }
  883.                 rispostaContemporaneita.setClaimsAgid(proprieta);
  884.             }
  885.            
  886.             sicurezzaMessaggio.setContemporaneita(rispostaContemporaneita);
  887.         }
  888.        
  889.         risposta.setSicurezzaMessaggio(sicurezzaMessaggio);
  890.        
  891.         return risposta;
  892.     }
  893.    
  894.     private static ErogazioneModIRest getRestProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, Map<String, AbstractProperty<?>> p) throws CoreException {

  895.         ErogazioneModIRest modi = new ErogazioneModIRest();
  896.         modi.setProtocollo(TipoApiEnum.REST);
  897.         if (ModISecurityUtils.isSicurezzaMessaggioRequired(aspc, asps.getPortType())) {        
  898.             // *** richiesta ***
  899.             modi.setRichiesta(ModiErogazioniApiHelper.getErogazioneRestRichiesta(p));
  900.            
  901.             // *** risposta ***
  902.             modi.setRisposta(ModiErogazioniApiHelper.getErogazioneRestRisposta(p));
  903.         }
  904.        
  905.         modi.setInformazioniGenerali(ModiErogazioniApiHelper.getErogazioneModIInfoGenerali(p));
  906.         return modi;
  907.     }

  908.     private static FruizioneModIOAuth getFruizioneModIOAuth(Map<String, AbstractProperty<?>> p, TipoApiEnum protocollo) throws CoreException {
  909.        
  910.         if(protocollo.equals(TipoApiEnum.SOAP)) {
  911.             String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_ALG, false);
  912.             // è obbligatoria in soap
  913.             if( (algoString!=null && StringUtils.isNotEmpty(algoString)) ) {
  914.                 return null;
  915.             }
  916.         }
  917.         else {
  918.             String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_ALG, false);
  919.             // è obbligatoria in rest
  920.             if( (algoString!=null && StringUtils.isNotEmpty(algoString)) ) {
  921.                 return null;
  922.             }
  923.         }
  924.        
  925.         String id = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, false);
  926.         String kid = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, false);
  927.         String modeKeystore = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, false);
  928.         if( (id!=null && StringUtils.isNotEmpty(id))
  929.                 ||
  930.                 (kid!=null && StringUtils.isNotEmpty(kid))
  931.                 ||
  932.                 (modeKeystore!=null && StringUtils.isNotEmpty(modeKeystore)) ) {
  933.             FruizioneModIOAuth oauth = new FruizioneModIOAuth();
  934.             oauth.setProtocollo(TipoConfigurazioneFruizioneEnum.OAUTH);
  935.             oauth.setIdentificativo(id);
  936.             oauth.setKid(kid);
  937.            
  938.             if(modeKeystore!=null && StringUtils.isNotEmpty(modeKeystore) && modeKeystore.equals(ModICostanti.MODIPA_PROFILO_RIDEFINISCI)) {
  939.                
  940.                 ModIKeyStoreRidefinito ks = ModiErogazioniApiHelper.readKeystoreRidefinito(p);
  941.                 oauth.setKeystore(ks);

  942.             } else {
  943.                
  944.                 ModIKeyStoreDefault ks = new ModIKeyStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  945.                 oauth.setKeystore(ks);
  946.                
  947.             }
  948.            
  949.             return oauth;
  950.            
  951.         }
  952.         return null;
  953.     }
  954.    
  955.     private static FruizioneModISoap getFruizioneModISoap(Map<String, AbstractProperty<?>> p, String schemaAudit) throws CoreException {

  956.         FruizioneModISoap modi = new FruizioneModISoap();
  957.         modi.setProtocollo(TipoConfigurazioneFruizioneEnum.SOAP);
  958.        
  959.         // *** richiesta ***
  960.        
  961.         FruizioneModISoapRichiesta richiesta = new FruizioneModISoapRichiesta();
  962.        
  963.         FruizioneModISoapRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = new FruizioneModISoapRichiestaSicurezzaMessaggio();
  964.        
  965.         ModISicurezzaMessaggioSoapAlgoritmoFirma algo = null;
  966.         String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_ALG, true);
  967.         if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_DSA_SHA_256)) {
  968.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.DSA_SHA_256;
  969.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256)) {
  970.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_256;
  971.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_384)) {
  972.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_384;
  973.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_512)) {
  974.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.ECDSA_SHA_512;
  975.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_256)) {
  976.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_256;
  977.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_384)) {
  978.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_384;
  979.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_512)) {
  980.             algo = ModISicurezzaMessaggioSoapAlgoritmoFirma.RSA_SHA_512;
  981.         }
  982.         sicurezzaMessaggioRichiesta.setAlgoritmo(algo);
  983.        
  984.         ModISicurezzaMessaggioSoapFormaCanonicaXml canonic = null;
  985.         String canonicString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_CANONICALIZATION_ALG, true);
  986.         if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_10)) {
  987.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.CANONICAL_XML_10;
  988.         } else if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_11)) {
  989.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.CANONICAL_XML_11;
  990.         } else if(canonicString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10)) {
  991.             canonic = ModISicurezzaMessaggioSoapFormaCanonicaXml.EXCLUSIVE_CANONICAL_XML_10;
  992.         }
  993.         sicurezzaMessaggioRichiesta.setFormaCanonicaXml(canonic);
  994.        
  995.         String headersString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP, false);
  996.         if(headersString!=null) {
  997.             List<String> headers = new ArrayList<>();
  998.             String[] headersplit = headersString.split("\n");
  999.             if(headersplit!=null && headersplit.length>0) {
  1000.                 headers.addAll(Arrays.asList(headersplit));
  1001.             }
  1002.             sicurezzaMessaggioRichiesta.setHeaderSoapFirmare(headers);
  1003.         }
  1004.        
  1005.         ModISicurezzaMessaggioSoapRiferimentoX509 rif509 = null;
  1006.         String rif509String = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509, true);
  1007.         if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN)) {
  1008.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.BINARY_SECURITY_TOKEN;
  1009.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_SECURITY_TOKEN_REFERENCE)) {
  1010.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.ISSUER_SERIAL_SECURITY_TOKEN_REFERENCE;
  1011.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_SKI)) {
  1012.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.SKI_KEY_IDENTIFIER;
  1013.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_THUMBPRINT)) {
  1014.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.THUMBPRINT_KEY_IDENTIFIER;
  1015.         } else if(rif509String.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_X509)) {
  1016.             rif509 = ModISicurezzaMessaggioSoapRiferimentoX509.X509_KEY_IDENTIFIER;
  1017.         }
  1018.         sicurezzaMessaggioRichiesta.setRiferimentoX509(rif509);
  1019.        
  1020.         sicurezzaMessaggioRichiesta.setCertificateChain(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN, true));
  1021.         sicurezzaMessaggioRichiesta.setIncludiSignatureToken(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN, true));
  1022.        
  1023.         sicurezzaMessaggioRichiesta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_EXPIRED, true));
  1024.        
  1025.         String wsaTo = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, false);
  1026.         if(wsaTo != null) {
  1027.             sicurezzaMessaggioRichiesta.setWsaTo(wsaTo);
  1028.         }
  1029.        
  1030.        
  1031.         // keystore
  1032.         String keystoreMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, false);
  1033.         if(ModICostanti.MODIPA_KEYSTORE_FRUIZIONE.equals(keystoreMode)) {
  1034.             String modeKeystore = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, false);
  1035.             if(modeKeystore!=null && StringUtils.isNotEmpty(modeKeystore) && modeKeystore.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  1036.                
  1037.                 ModIKeyStoreDefault ks = new ModIKeyStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  1038.                 sicurezzaMessaggioRichiesta.setKeystore(ks);
  1039.             } else {
  1040.                
  1041.                 ModIKeyStoreRidefinito ks = ModiErogazioniApiHelper.readKeystoreRidefinito(p);
  1042.                 sicurezzaMessaggioRichiesta.setKeystore(ks);
  1043.             }
  1044.         }
  1045.         else {
  1046.             if(ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_TOKEN_POLICY.equals(keystoreMode)) {
  1047.                 sicurezzaMessaggioRichiesta.setKeystoreTokenPolicy(true);
  1048.             }
  1049.             else {
  1050.                 // nop: definito sull'applicativo
  1051.             }
  1052.         }
  1053.        
  1054.        
  1055.         // info utente
  1056.        
  1057.         sicurezzaMessaggioRichiesta.setInformazioniUtenteCodiceEnte(ModiErogazioniApiHelper.getInformazioniUtenteCodiceEnte(p));
  1058.         sicurezzaMessaggioRichiesta.setInformazioniUtenteUserid(ModiErogazioniApiHelper.getInformazioniUtenteUserid(p));
  1059.         sicurezzaMessaggioRichiesta.setInformazioniUtenteIndirizzoIp(ModiErogazioniApiHelper.getInformazioniUtenteIndirizzoIp(p));
  1060.        
  1061.         // audit
  1062.         FruizioneModIRichiestaInformazioniUtenteAudit audit = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, schemaAudit);
  1063.         if(audit!=null) {
  1064.             sicurezzaMessaggioRichiesta.setAudit(audit);
  1065.         }
  1066.        
  1067.         richiesta.setSicurezzaMessaggio(sicurezzaMessaggioRichiesta);
  1068.        
  1069.         // oauth
  1070.        
  1071.         String id = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, false);
  1072.         String kid = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, false);
  1073.         if( (id!=null && StringUtils.isNotEmpty(id))
  1074.                 ||
  1075.                 (kid!=null && StringUtils.isNotEmpty(kid))
  1076.                 ) {
  1077.             BaseFruizioneModIOAuth oauth = new BaseFruizioneModIOAuth();
  1078.             oauth.setIdentificativo(id);
  1079.             oauth.setKid(kid);
  1080.             richiesta.setOauth(oauth);
  1081.         }

  1082.         modi.setRichiesta(richiesta);
  1083.        
  1084.        
  1085.         // *** risposta ***
  1086.        
  1087.         FruizioneModISoapRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = new FruizioneModISoapRispostaSicurezzaMessaggio();
  1088.         FruizioneModISoapRisposta risposta = new FruizioneModISoapRisposta();
  1089.        
  1090.         String truststoreMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, true);
  1091.         if(truststoreMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  1092.             ModITrustStoreDefault truststore = new ModITrustStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  1093.             sicurezzaMessaggioRisposta.setTruststore(truststore);
  1094.         } else {
  1095.             ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  1096.            
  1097.             truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, true));
  1098.             truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, false));
  1099.             ModITruststoreEnum tipo = null;
  1100.             String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, true);
  1101.             if(HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  1102.                 tipo = ModITruststoreEnum.PKCS11;
  1103.                 truststore.setPcks11Tipo(truststoreTipoString);
  1104.             }
  1105.             else if(isModITrustStore(truststoreTipoString)) {
  1106.                 tipo = ModITruststoreEnum.PDND;
  1107.                 truststore.setPdndTipo(truststoreTipoString);
  1108.             }
  1109.             else {
  1110.                 if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS)) {
  1111.                     tipo = ModITruststoreEnum.JKS;
  1112.                 }
  1113.             }
  1114.             truststore.setTruststoreTipo(tipo);
  1115.             truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, true));
  1116.             truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, true));
  1117.             sicurezzaMessaggioRisposta.setTruststore(truststore);
  1118.         }
  1119.        
  1120.         String iatMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, false);
  1121.         if(StringUtils.isNotEmpty(iatMode) && ModICostanti.MODIPA_PROFILO_RIDEFINISCI.equals(iatMode)) {
  1122.             sicurezzaMessaggioRisposta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT_SECONDS, false));
  1123.         }

  1124.         Boolean verificaWsaTo = ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, false);
  1125.         sicurezzaMessaggioRisposta.setVerificaWsaTo(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, verificaWsaTo!=null && verificaWsaTo.booleanValue()));
  1126.         if(sicurezzaMessaggioRisposta.isVerificaWsaTo()!=null && sicurezzaMessaggioRisposta.isVerificaWsaTo()) {
  1127.             sicurezzaMessaggioRisposta.setAudienceAtteso(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE_VALORE, false));  
  1128.         }
  1129.        
  1130.         risposta.setSicurezzaMessaggio(sicurezzaMessaggioRisposta);
  1131.        
  1132.         modi.setRisposta(risposta);
  1133.        
  1134.        
  1135.         return modi;
  1136.     }

  1137.     private static FruizioneModIRest getFruizioneModIRest(Map<String, AbstractProperty<?>> p, String schemaAudit) throws CoreException {

  1138.         FruizioneModIRest modi = new FruizioneModIRest();
  1139.         modi.setProtocollo(TipoConfigurazioneFruizioneEnum.REST);
  1140.        
  1141.         // *** richiesta ***
  1142.        
  1143.         FruizioneModIRestRichiesta richiesta = new FruizioneModIRestRichiesta();
  1144.         FruizioneModIRestRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = new FruizioneModIRestRichiestaSicurezzaMessaggio();

  1145.         ModISicurezzaMessaggioRestAlgoritmoFirma algo = null;
  1146.         String algoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_ALG, true);
  1147.         if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES256)) {
  1148.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES256;
  1149.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES384)) {
  1150.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES384;
  1151.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES512)) {
  1152.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.ES512;
  1153.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256)) {
  1154.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS256;
  1155.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS384)) {
  1156.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS384;
  1157.         } else if(algoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS512)) {
  1158.             algo = ModISicurezzaMessaggioRestAlgoritmoFirma.RS512;
  1159.         }
  1160.         sicurezzaMessaggioRichiesta.setAlgoritmo(algo);
  1161.        
  1162.         String headersString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, false);
  1163.         if(headersString!=null) {
  1164.             List<String> headers = new ArrayList<>();
  1165.             String[] headersplit = headersString.split(",");
  1166.             if(headersplit!=null && headersplit.length>0) {
  1167.                 headers.addAll(Arrays.asList(headersplit));
  1168.             }
  1169.             sicurezzaMessaggioRichiesta.setHeaderHttpFirmare(headers);
  1170.         }
  1171.        
  1172.         sicurezzaMessaggioRichiesta.setRiferimentoX509(ModiErogazioniApiHelper.getX509(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509, true)));

  1173.         sicurezzaMessaggioRichiesta.setCertificateChain(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN, true));
  1174.        
  1175.         sicurezzaMessaggioRichiesta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_EXPIRED, true));
  1176.        
  1177.         sicurezzaMessaggioRichiesta.setAudience(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, false));
  1178.        
  1179.         String pString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_JWT_CLAIMS, false);
  1180.         if(pString!=null) {
  1181.             List<String> proprieta = new ArrayList<>();
  1182.             String[] psplit = pString.split("\n");
  1183.             if(psplit!=null && psplit.length>0) {
  1184.                 proprieta.addAll(Arrays.asList(psplit));
  1185.             }
  1186.             sicurezzaMessaggioRichiesta.setClaims(proprieta);
  1187.         }
  1188.        
  1189.         // keystore
  1190.         String keystoreMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, false);
  1191.         if(ModICostanti.MODIPA_KEYSTORE_FRUIZIONE.equals(keystoreMode)) {
  1192.             String modeKeystore = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, false);
  1193.             if(modeKeystore!=null && StringUtils.isNotEmpty(modeKeystore) && modeKeystore.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  1194.                
  1195.                 ModIKeyStoreDefault ks = new ModIKeyStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  1196.                 sicurezzaMessaggioRichiesta.setKeystore(ks);
  1197.             } else {
  1198.                
  1199.                 ModIKeyStoreRidefinito ks = ModiErogazioniApiHelper.readKeystoreRidefinito(p);
  1200.                 sicurezzaMessaggioRichiesta.setKeystore(ks);
  1201.             }
  1202.         }
  1203.         else {
  1204.             if(ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_TOKEN_POLICY.equals(keystoreMode)) {
  1205.                 sicurezzaMessaggioRichiesta.setKeystoreTokenPolicy(true);
  1206.             }
  1207.             else {
  1208.                 //  nop: definito sull'applicativo
  1209.             }
  1210.         }
  1211.        
  1212.         // info utente
  1213.        
  1214.         sicurezzaMessaggioRichiesta.setInformazioniUtenteCodiceEnte(ModiErogazioniApiHelper.getInformazioniUtenteCodiceEnte(p));
  1215.         sicurezzaMessaggioRichiesta.setInformazioniUtenteUserid(ModiErogazioniApiHelper.getInformazioniUtenteUserid(p));
  1216.         sicurezzaMessaggioRichiesta.setInformazioniUtenteIndirizzoIp(ModiErogazioniApiHelper.getInformazioniUtenteIndirizzoIp(p));
  1217.        
  1218.         // audit
  1219.        
  1220.         FruizioneModIRichiestaInformazioniUtenteAudit audit = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, schemaAudit);
  1221.         if(audit!=null) {
  1222.             sicurezzaMessaggioRichiesta.setAudit(audit);
  1223.         }
  1224.        
  1225.         // contemporaneita'
  1226.        
  1227.         String idJtiRichiesta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI, false);
  1228.         String audienceRichiesta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE, false);
  1229.         String claimsAuthRichiesta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION, false);
  1230.         String claimsModiRichiesta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JWT_CLAIMS_MODI, false);
  1231.         if(StringUtils.isNotEmpty(idJtiRichiesta) || StringUtils.isNotEmpty(audienceRichiesta)  ||
  1232.                 StringUtils.isNotEmpty(claimsAuthRichiesta)  || StringUtils.isNotEmpty(claimsModiRichiesta) ) {
  1233.             FruizioneModIRestRichiestaSicurezzaMessaggioContemporaneita richiestaContemporaneita = new FruizioneModIRestRichiestaSicurezzaMessaggioContemporaneita();
  1234.            
  1235.             if(StringUtils.isNotEmpty(idJtiRichiesta)) {
  1236.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_VALUE_SAME.equals(idJtiRichiesta)) {
  1237.                     richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.SAME);
  1238.                 }
  1239.                 else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_VALUE_DIFFERENT.equals(idJtiRichiesta)) {
  1240.                     richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT);
  1241.                 }
  1242.             }
  1243.             if(richiestaContemporaneita.getIdentificativo()==null) {
  1244.                 richiestaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestSameDifferentEnum.SAME); // default
  1245.             }
  1246.             if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(richiestaContemporaneita.getIdentificativo())) {
  1247.                 String idJtiAsIdMessaggio = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO, false);
  1248.                 if(StringUtils.isNotEmpty(idJtiAsIdMessaggio)) {
  1249.                     if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_AUTHORIZATION.equals(idJtiAsIdMessaggio)) {
  1250.                         richiestaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.BEARER);
  1251.                     }
  1252.                     else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_MODI.equals(idJtiAsIdMessaggio)) {
  1253.                         richiestaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID);
  1254.                     }
  1255.                 }
  1256.                 if(richiestaContemporaneita.getUsaComeIdMessaggio()==null) {
  1257.                     richiestaContemporaneita.setUsaComeIdMessaggio(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID); // default
  1258.                 }
  1259.             }
  1260.            
  1261.             if(StringUtils.isNotEmpty(audienceRichiesta)) {
  1262.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME.equals(audienceRichiesta)) {
  1263.                     richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME);
  1264.                 }
  1265.                 else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT.equals(audienceRichiesta)) {
  1266.                     richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT);
  1267.                 }
  1268.             }
  1269.             if(richiestaContemporaneita.getAudience()==null) {
  1270.                 richiestaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME); // default
  1271.             }
  1272.             if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(richiestaContemporaneita.getAudience())) {
  1273.                 String audienceAtteso = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY, false);
  1274.                 richiestaContemporaneita.setAudienceAtteso(audienceAtteso);
  1275.             }
  1276.            
  1277.             if(claimsAuthRichiesta!=null) {
  1278.                 List<String> proprieta = new ArrayList<>();
  1279.                 String[] psplit = claimsAuthRichiesta.split("\n");
  1280.                 if(psplit!=null && psplit.length>0) {
  1281.                     proprieta.addAll(Arrays.asList(psplit));
  1282.                 }
  1283.                 richiestaContemporaneita.setClaimsBearer(proprieta);
  1284.             }
  1285.             if(claimsModiRichiesta!=null) {
  1286.                 List<String> proprieta = new ArrayList<>();
  1287.                 String[] psplit = claimsModiRichiesta.split("\n");
  1288.                 if(psplit!=null && psplit.length>0) {
  1289.                     proprieta.addAll(Arrays.asList(psplit));
  1290.                 }
  1291.                 richiestaContemporaneita.setClaimsAgid(proprieta);
  1292.             }
  1293.            
  1294.             sicurezzaMessaggioRichiesta.setContemporaneita(richiestaContemporaneita);
  1295.         }
  1296.        
  1297.         richiesta.setSicurezzaMessaggio(sicurezzaMessaggioRichiesta);
  1298.        
  1299.         // oauth
  1300.        
  1301.         String id = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, false);
  1302.         String kid = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, false);
  1303.         if( (id!=null && StringUtils.isNotEmpty(id))
  1304.                 ||
  1305.                 (kid!=null && StringUtils.isNotEmpty(kid))
  1306.                 ) {
  1307.             BaseFruizioneModIOAuth oauth = new BaseFruizioneModIOAuth();
  1308.             oauth.setIdentificativo(id);
  1309.             oauth.setKid(kid);
  1310.             richiesta.setOauth(oauth);
  1311.         }      
  1312.        
  1313.         modi.setRichiesta(richiesta);
  1314.        
  1315.        
  1316.         // *** risposta ***
  1317.        
  1318.         FruizioneModIRestRisposta risposta = new FruizioneModIRestRisposta();
  1319.         FruizioneModIRestRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = new FruizioneModIRestRispostaSicurezzaMessaggio();

  1320.         if(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, true).equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_TRUE)){
  1321.             sicurezzaMessaggioRisposta.setRiferimentoX509(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RICHIESTA);
  1322.         } else {
  1323.             sicurezzaMessaggioRisposta.setRiferimentoX509(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RIDEFINITO);
  1324.             sicurezzaMessaggioRisposta.setRiferimentoX509Risposta(ModiErogazioniApiHelper.getX509(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509, true)));
  1325.         }
  1326.        
  1327.         String truststoreMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, true);
  1328.         if(truststoreMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  1329.             ModITrustStoreDefault truststore = new ModITrustStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  1330.             sicurezzaMessaggioRisposta.setTruststore(truststore);
  1331.         } else {
  1332.             ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  1333.            
  1334.             truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, true));
  1335.             truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, false));
  1336.             ModITruststoreEnum tipo = null;
  1337.             String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, true);
  1338.             if(HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  1339.                 tipo = ModITruststoreEnum.PKCS11;
  1340.                 truststore.setPcks11Tipo(truststoreTipoString);
  1341.             }
  1342.             else if(isModITrustStore(truststoreTipoString)) {
  1343.                 tipo = ModITruststoreEnum.PDND;
  1344.                 truststore.setPdndTipo(truststoreTipoString);
  1345.             }
  1346.             else {
  1347.                 if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE_VALUE_JKS)) {
  1348.                     tipo = ModITruststoreEnum.JKS;
  1349.                 }
  1350.             }
  1351.             truststore.setTruststoreTipo(tipo);
  1352.             truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, true));
  1353.             truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, true));
  1354.             sicurezzaMessaggioRisposta.setTruststore(truststore);
  1355.         }
  1356.        
  1357.         String truststoreSSLMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, false);
  1358.         if(truststoreSSLMode!=null) {
  1359.             if(truststoreSSLMode.equals(ModICostanti.MODIPA_PROFILO_DEFAULT)) {
  1360.                 ModITrustStoreDefault truststore = new ModITrustStoreDefault().modalita(StatoDefaultRidefinitoEnum.DEFAULT);
  1361.                 sicurezzaMessaggioRisposta.setTruststoreSsl(truststore);
  1362.             } else {
  1363.                 ModITrustStoreRidefinito truststore = new ModITrustStoreRidefinito().modalita(StatoDefaultRidefinitoEnum.RIDEFINITO);
  1364.                
  1365.                 truststore.setTruststoreCrl(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, true));
  1366.                 truststore.setTruststoreOcspPolicy(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, false));
  1367.                 ModITruststoreEnum tipo = null;
  1368.                 String truststoreTipoString = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, true);
  1369.                 if(HSMUtils.isKeystoreHSM(truststoreTipoString)) {
  1370.                     tipo = ModITruststoreEnum.PKCS11;
  1371.                     truststore.setPcks11Tipo(truststoreTipoString);
  1372.                 }
  1373.                 /** SU SSL NON HA SENSO else if(isModITrustStore(truststoreTipoString)) {
  1374.                     tipo = ModITruststoreEnum.PDND;
  1375.                     truststore.setPdndTipo(truststoreTipoString);
  1376.                 }*/
  1377.                 else {
  1378.                     if(truststoreTipoString.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS)) {
  1379.                         tipo = ModITruststoreEnum.JKS;
  1380.                     }
  1381.                 }
  1382.                 truststore.setTruststoreTipo(tipo);
  1383.                 truststore.setTruststorePath(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, true));
  1384.                 truststore.setTruststorePassword(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, true));
  1385.                 sicurezzaMessaggioRisposta.setTruststoreSsl(truststore);
  1386.             }
  1387.         }
  1388.        
  1389.         String iatMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, false);
  1390.         if(StringUtils.isNotEmpty(iatMode) && ModICostanti.MODIPA_PROFILO_RIDEFINISCI.equals(iatMode)) {
  1391.             sicurezzaMessaggioRisposta.setTimeToLive(ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT_SECONDS, false));
  1392.         }

  1393.         Boolean verificaAudience = ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, false);
  1394.         sicurezzaMessaggioRisposta.setVerificaAudience(ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, verificaAudience!=null && verificaAudience.booleanValue()));
  1395.         if(sicurezzaMessaggioRisposta.isVerificaAudience()!=null && sicurezzaMessaggioRisposta.isVerificaAudience()) {
  1396.             sicurezzaMessaggioRisposta.setAudienceAtteso(ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE_VALORE, false));  
  1397.         }
  1398.        
  1399.         // contemporaneita'
  1400.        
  1401.         String idJtiRisposta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI, false);
  1402.         String audienceRisposta = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE, false);
  1403.         if(StringUtils.isNotEmpty(idJtiRisposta) || StringUtils.isNotEmpty(audienceRisposta) ) {
  1404.            
  1405.             FruizioneModIRestRispostaSicurezzaMessaggioContemporaneita rispostaContemporaneita = new FruizioneModIRestRispostaSicurezzaMessaggioContemporaneita();
  1406.            
  1407.             if(StringUtils.isNotEmpty(idJtiRisposta)) {
  1408.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_AUTHORIZATION.equals(idJtiRisposta)) {
  1409.                     rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.BEARER);
  1410.                 }
  1411.                 else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_MODI.equals(idJtiRisposta)) {
  1412.                     rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID);
  1413.                 }
  1414.             }
  1415.             if(rispostaContemporaneita.getIdentificativo()==null) {
  1416.                 rispostaContemporaneita.setIdentificativo(ModISicurezzaMessaggioRestTokenChoiseEnum.AGID); // default
  1417.             }
  1418.            
  1419.             if(StringUtils.isNotEmpty(audienceRisposta)) {
  1420.                 if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME.equals(audienceRisposta)) {
  1421.                     rispostaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME);
  1422.                 }
  1423.                 else if(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT.equals(audienceRisposta)) {
  1424.                     rispostaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT);
  1425.                 }
  1426.             }
  1427.             if(rispostaContemporaneita.getAudience()==null) {
  1428.                 rispostaContemporaneita.setAudience(ModISicurezzaMessaggioRestSameDifferentEnum.SAME); // default
  1429.             }
  1430.             if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(rispostaContemporaneita.getAudience())) {
  1431.                 String audienceAtteso = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY, false);
  1432.                 rispostaContemporaneita.setAudienceAtteso(audienceAtteso);
  1433.             }
  1434.            
  1435.             sicurezzaMessaggioRisposta.setContemporaneita(rispostaContemporaneita);
  1436.         }
  1437.        
  1438.         risposta.setSicurezzaMessaggio(sicurezzaMessaggioRisposta);
  1439.        
  1440.         modi.setRisposta(risposta);
  1441.        
  1442.        
  1443.         return modi;
  1444.     }
  1445.    
  1446.     private static boolean isModITrustStoreSafe(String truststoreTipoString) {
  1447.         try {
  1448.             return isModITrustStore(truststoreTipoString);
  1449.         }catch(Exception e) {
  1450.             if(Startup.getLog()!=null) {
  1451.                 Startup.getLog().error(e.getMessage(),e);  
  1452.             }
  1453.         }
  1454.         return false;
  1455.     }
  1456.     private static boolean isModITrustStore(String truststoreTipoString) throws CoreException {
  1457.         try {
  1458.             List<RemoteStoreConfig> remoteStoreConfig = ModIUtils.getRemoteStoreConfig();
  1459.             if(remoteStoreConfig!=null && !remoteStoreConfig.isEmpty()) {
  1460.                 for (RemoteStoreConfig rsc : remoteStoreConfig) {
  1461.                     if(truststoreTipoString.equals(rsc.getStoreName())) {
  1462.                         return true;
  1463.                     }
  1464.                 }
  1465.             }
  1466.             return false;
  1467.         }catch(Exception e) {
  1468.             throw new CoreException(e.getMessage(),e);
  1469.         }
  1470.     }

  1471.     private static FruizioneModIRichiestaInformazioneUtente getInformazioniUtenteCodiceEnte(
  1472.             Map<String, AbstractProperty<?>> p) throws CoreException {
  1473.         return ModiErogazioniApiHelper.getInformazioniUtente(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE);
  1474.     }

  1475.     private static FruizioneModIRichiestaInformazioneUtente getInformazioniUtenteUserid(
  1476.             Map<String, AbstractProperty<?>> p) throws CoreException {
  1477.         return ModiErogazioniApiHelper.getInformazioniUtente(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER);
  1478.     }

  1479.     private static FruizioneModIRichiestaInformazioneUtente getInformazioniUtenteIndirizzoIp(
  1480.             Map<String, AbstractProperty<?>> p) throws CoreException {
  1481.         return ModiErogazioniApiHelper.getInformazioniUtente(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER);
  1482.     }
  1483.    
  1484.     private static FruizioneModIRichiestaInformazioneUtente getInformazioniUtente(
  1485.             Map<String, AbstractProperty<?>> p, String mod, String value) throws CoreException {
  1486.        
  1487.         String modalitaString = ProtocolPropertiesHelper.getStringProperty(p, mod, false);
  1488.        
  1489.         if(modalitaString == null) {
  1490.             return null;
  1491.         } else {
  1492.             FruizioneModIRichiestaInformazioneUtente u = new FruizioneModIRichiestaInformazioneUtente();
  1493.             StatoDefaultRidefinitoEnum modalita = modalitaString.equals(ModICostanti.MODIPA_PROFILO_DEFAULT) ? StatoDefaultRidefinitoEnum.DEFAULT : StatoDefaultRidefinitoEnum.RIDEFINITO;
  1494.        
  1495.             u.setModalita(modalita);
  1496.             if(modalita.equals(StatoDefaultRidefinitoEnum.RIDEFINITO)) {
  1497.                 String valueString = ProtocolPropertiesHelper.getStringProperty(p, value, false);
  1498.                 u.setValore(valueString);
  1499.             }

  1500.             return u;
  1501.         }
  1502.     }
  1503.    
  1504.     private static BaseModIRichiestaInformazioniUtenteAudit getInformazioniUtenteAudit(Map<String, AbstractProperty<?>> p, boolean fruizione) throws CoreException {
  1505.        
  1506.         BaseModIRichiestaInformazioniUtenteAudit infoAudit = null;
  1507.        
  1508.         String auditMode = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE, false);
  1509.         if(auditMode!=null && StringUtils.isNotEmpty(auditMode)) {
  1510.            
  1511.             ModISicurezzaMessaggioRestSameDifferentEnum aud = null;
  1512.             String audCustom = null;
  1513.             if(auditMode.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTE_AUDIT_AUDIENCE_VALUE_SAME)) {
  1514.                 aud = ModISicurezzaMessaggioRestSameDifferentEnum.SAME;
  1515.             }
  1516.             else if(auditMode.equals(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT)) {
  1517.                 aud = ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT;
  1518.                 audCustom = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT, false);
  1519.             }
  1520.             if(aud!=null) {
  1521.                 infoAudit = fruizione ? new FruizioneModIRichiestaInformazioniUtenteAudit() : new BaseModIRichiestaInformazioniUtenteAudit();
  1522.                 infoAudit.setAudience(aud);
  1523.                 infoAudit.setAudienceAtteso(audCustom);
  1524.             }
  1525.            
  1526.         }
  1527.        
  1528.         return infoAudit;
  1529.        
  1530.     }
  1531.    
  1532.     private static List<String> getInformazioniAuditRequired(String schemaAudit){
  1533.         return ModiErogazioniApiHelper.getInformazioniAudit(schemaAudit, true);
  1534.     }
  1535.     private static List<String> getInformazioniAudit(String schemaAudit){
  1536.         return ModiErogazioniApiHelper.getInformazioniAudit(schemaAudit, false);
  1537.     }
  1538.     private static List<String> getInformazioniAudit(String schemaAudit, boolean required){
  1539.         List<String> infoRequired = new ArrayList<>();
  1540.         if(schemaAudit!=null) {
  1541.             ModIAuditConfig modIAuditConfig = ModiErogazioniApiHelper.getModIAuditConfig(schemaAudit);
  1542.        
  1543.             if(modIAuditConfig!=null && modIAuditConfig.getClaims()!=null && !modIAuditConfig.getClaims().isEmpty()) {
  1544.                 for (ModIAuditClaimConfig claim : modIAuditConfig.getClaims()) {
  1545.                     if(!required || claim.isRequired()) {
  1546.                         infoRequired.add(claim.getNome());
  1547.                     }
  1548.                 }
  1549.             }
  1550.         }
  1551.         return infoRequired;
  1552.     }
  1553.    
  1554.     private static FruizioneModIRichiestaInformazioniUtenteAudit getInformazioniUtenteAudit(Map<String, AbstractProperty<?>> p, String schemaAudit) throws CoreException {
  1555.        
  1556.         BaseModIRichiestaInformazioniUtenteAudit infoAuditBase = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, true);
  1557.         FruizioneModIRichiestaInformazioniUtenteAudit infoAudit = null;
  1558.         if(infoAuditBase instanceof FruizioneModIRichiestaInformazioniUtenteAudit) {
  1559.             infoAudit = (FruizioneModIRichiestaInformazioniUtenteAudit) infoAuditBase;
  1560.         }
  1561.        
  1562.         if(schemaAudit!=null) {
  1563.             ModIAuditConfig modIAuditConfig = ModiErogazioniApiHelper.getModIAuditConfig(schemaAudit);
  1564.            
  1565.             if(modIAuditConfig!=null && modIAuditConfig.getClaims()!=null && !modIAuditConfig.getClaims().isEmpty()) {
  1566.                 infoAudit = ModiErogazioniApiHelper.getInformazioniUtenteAudit(p, modIAuditConfig.getClaims(), infoAudit);
  1567.             }
  1568.         }

  1569.         return infoAudit;
  1570.     }
  1571.     private static ModIAuditConfig getModIAuditConfig(String schemaAudit) {
  1572.         List<ModIAuditConfig> l = null;
  1573.         try {
  1574.             l = ModIProperties.getInstance().getAuditConfig();
  1575.         }catch(Exception e) {
  1576.             // ignore
  1577.         }
  1578.        
  1579.         ModIAuditConfig modIAuditConfig = null;
  1580.         if(l!=null && !l.isEmpty()) {
  1581.             for (ModIAuditConfig modIAuditConfigCheck : l) {
  1582.                 if(schemaAudit.equals(modIAuditConfigCheck.getNome())) {
  1583.                     modIAuditConfig = modIAuditConfigCheck;
  1584.                     break;
  1585.                 }
  1586.             }
  1587.         }
  1588.         return modIAuditConfig;
  1589.     }
  1590.     private static FruizioneModIRichiestaInformazioniUtenteAudit getInformazioniUtenteAudit(Map<String, AbstractProperty<?>> p, List<ModIAuditClaimConfig> list, FruizioneModIRichiestaInformazioniUtenteAudit infoAudit) throws CoreException {
  1591.         if(list!=null && !list.isEmpty()) {
  1592.             for (ModIAuditClaimConfig modIAuditClaimConfig : list) {
  1593.                 FruizioneModIRichiestaInformazioneUtenteAudit info = ModiErogazioniApiHelper.getInformazioneUtenteAudit(p, modIAuditClaimConfig.getNome());
  1594.                 if(info!=null) {
  1595.                     if(infoAudit==null) {
  1596.                         infoAudit = new FruizioneModIRichiestaInformazioniUtenteAudit();
  1597.                     }
  1598.                     if(infoAudit.getInformazioni()==null) {
  1599.                         infoAudit.setInformazioni(new ArrayList<>());
  1600.                     }
  1601.                     infoAudit.addInformazioniItem(info);
  1602.                 }
  1603.             }
  1604.         }
  1605.         return infoAudit;
  1606.     }
  1607.    
  1608.     private static FruizioneModIRichiestaInformazioneUtenteAudit getInformazioneUtenteAudit(
  1609.             Map<String, AbstractProperty<?>> p, String nome) throws CoreException {
  1610.        
  1611.         String mod = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX+nome;
  1612.         String value = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_PREFIX+nome;
  1613.        
  1614.         String modalitaString = ProtocolPropertiesHelper.getStringProperty(p, mod, false);
  1615.        
  1616.         if(modalitaString == null) {
  1617.             return null;
  1618.         } else {
  1619.             FruizioneModIRichiestaInformazioneUtenteAudit u = new FruizioneModIRichiestaInformazioneUtenteAudit();
  1620.             u.setNome(nome);
  1621.             StatoDefaultRidefinitoEnum modalita = modalitaString.equals(ModICostanti.MODIPA_PROFILO_DEFAULT) ? StatoDefaultRidefinitoEnum.DEFAULT : StatoDefaultRidefinitoEnum.RIDEFINITO;
  1622.        
  1623.             u.setModalita(modalita);
  1624.             if(modalita.equals(StatoDefaultRidefinitoEnum.RIDEFINITO)) {
  1625.                 String valueString = ProtocolPropertiesHelper.getStringProperty(p, value, false);
  1626.                 u.setValore(valueString);
  1627.             }

  1628.             return u;
  1629.         }
  1630.     }

  1631.     private static List<ModISicurezzaMessaggioRestRiferimentoX509> getX509(String x509String) {
  1632.         String[] split = x509String.split(",");
  1633.        
  1634.         List<ModISicurezzaMessaggioRestRiferimentoX509> lst = new ArrayList<>();
  1635.         for(String x: split) {
  1636.             lst.add(ModISicurezzaMessaggioRestRiferimentoX509.fromValue(x));
  1637.         }
  1638.        
  1639.         return lst;
  1640.        
  1641.     }

  1642.     public static ProtocolProperties getProtocolProperties(Erogazione body, AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ErogazioniEnv env, boolean required)
  1643.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  1644.         return ModiErogazioniApiHelper.getModiProtocolProperties(aspc, asps, body.getModi(), ModiErogazioniApiHelper.getErogazioneConf(asps, env), required);
  1645.     }

  1646.     public static ProtocolProperties getProtocolProperties(Fruizione body, AccordoServizioParteSpecifica asps, ErogazioniEnv env, boolean required)
  1647.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {      
  1648.         return ModiErogazioniApiHelper.getModiProtocolProperties(body.getModi(), ModiErogazioniApiHelper.getFruizioneConf(asps, env), required);
  1649.     }

  1650.     public static ProtocolProperties updateModiProtocolProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ProfiloEnum profilo, OneOfErogazioneModIModi modi, ErogazioniEnv env)
  1651.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  1652.         if(profilo == null || (!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA))) {
  1653.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.OPERAZIONE_UTILIZZABILE_SOLO_CON_MODI);
  1654.         }

  1655.         ErogazioneConf erogazioneConf = ModiErogazioniApiHelper.getErogazioneConf(asps, env);
  1656.         return ModiErogazioniApiHelper.getModiProtocolProperties(aspc, asps, modi, erogazioneConf);

  1657.     }

  1658.     public static ProtocolProperties updateModiProtocolProperties(AccordoServizioParteSpecifica asps, ProfiloEnum profilo, OneOfFruizioneModIModi modi, ErogazioniEnv env)
  1659.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  1660.         if(profilo == null || (!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA))) {
  1661.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.OPERAZIONE_UTILIZZABILE_SOLO_CON_MODI);
  1662.         }

  1663.         FruizioneConf fruizioneConf = ModiErogazioniApiHelper.getFruizioneConf(asps, env);
  1664.         return ModiErogazioniApiHelper.getModiProtocolProperties(modi, fruizioneConf);

  1665.     }

  1666.     private static ProtocolProperties getModiProtocolProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, OneOfErogazioneModIModi modi, ErogazioneConf erogazioneConf) {

  1667.         if(modi == null) {
  1668.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SPECIFICARE_CONFIGURAZIONE_MODI);
  1669.         }

  1670.         ProtocolProperties p = new ProtocolProperties();

  1671.         if(erogazioneConf.protocollo.equals(TipoApiEnum.SOAP)) {
  1672.             ModiErogazioniApiHelper.getSOAPProperties(aspc, asps, (ErogazioneModISoap)modi, p, erogazioneConf);
  1673.         } else if(erogazioneConf.protocollo.equals(TipoApiEnum.REST)) {
  1674.             ModiErogazioniApiHelper.getRESTProperties(aspc, asps, (ErogazioneModIRest)modi, p, erogazioneConf);
  1675.         }


  1676.         return p;
  1677.     }

  1678.     private static ProtocolProperties getModiProtocolProperties(OneOfFruizioneModIModi modi, FruizioneConf fruizioneConf) {

  1679.         if(modi == null) {
  1680.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SPECIFICARE_CONFIGURAZIONE_MODI);
  1681.         }

  1682.         ProtocolProperties p = new ProtocolProperties();

  1683.         if(TipoConfigurazioneFruizioneEnum.OAUTH.equals(modi.getProtocollo())) {
  1684.             ModiErogazioniApiHelper.getOAUTHProperties((FruizioneModIOAuth)modi, p, fruizioneConf);
  1685.         }
  1686.         else if(fruizioneConf.protocollo.equals(TipoApiEnum.SOAP)) {
  1687.             ModiErogazioniApiHelper.getSOAPProperties((FruizioneModISoap)modi, p, fruizioneConf);
  1688.         } else if(fruizioneConf.protocollo.equals(TipoApiEnum.REST)) {
  1689.             ModiErogazioniApiHelper.getRESTProperties((FruizioneModIRest)modi, p, fruizioneConf);
  1690.         }


  1691.         return p;
  1692.     }

  1693.     private static ProtocolProperties getModiProtocolProperties(OneOfFruizioneModi modi, FruizioneConf fruizioneConf,
  1694.             boolean modiRequired) {

  1695.         if(modi == null) {
  1696.             if(modiRequired) {
  1697.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SPECIFICARE_CONFIGURAZIONE_MODI);
  1698.             }
  1699.             else {
  1700.                 return null;
  1701.             }
  1702.         }

  1703.         ProtocolProperties p = new ProtocolProperties();

  1704.         if(TipoConfigurazioneFruizioneEnum.OAUTH.equals(modi.getProtocollo())) {
  1705.             ModiErogazioniApiHelper.getOAUTHProperties((FruizioneModIOAuth)modi, p, fruizioneConf);
  1706.         }
  1707.         else if(fruizioneConf.protocollo.equals(TipoApiEnum.SOAP)) {
  1708.             ModiErogazioniApiHelper.getSOAPProperties((FruizioneModISoap)modi, p, fruizioneConf);
  1709.         } else if(fruizioneConf.protocollo.equals(TipoApiEnum.REST)) {
  1710.             ModiErogazioniApiHelper.getRESTProperties((FruizioneModIRest)modi, p, fruizioneConf);
  1711.         }


  1712.         return p;
  1713.     }

  1714.     private static ProtocolProperties getModiProtocolProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, OneOfErogazioneModi modi, ErogazioneConf erogazioneConf,
  1715.             boolean modiRequired) {

  1716.         if(modi == null) {
  1717.             if(modiRequired) {
  1718.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SPECIFICARE_CONFIGURAZIONE_MODI);
  1719.             }
  1720.             else {
  1721.                 return null;
  1722.             }
  1723.         }

  1724.         ProtocolProperties p = new ProtocolProperties();
  1725.        
  1726.         if(erogazioneConf.protocollo.equals(TipoApiEnum.SOAP)) {
  1727.             ModiErogazioniApiHelper.getSOAPProperties(aspc, asps, (ErogazioneModISoap)modi, p, erogazioneConf);
  1728.         } else if(erogazioneConf.protocollo.equals(TipoApiEnum.REST)) {
  1729.             ModiErogazioniApiHelper.getRESTProperties(aspc, asps, (ErogazioneModIRest)modi, p, erogazioneConf);
  1730.         }


  1731.         return p;
  1732.     }

  1733.     private static void fillErogazioneRESTRichiestaProperties(ErogazioneModIRest modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {
  1734.         ErogazioneModIRestRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = modi.getRichiesta().getSicurezzaMessaggio();
  1735.        
  1736.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509, ModiErogazioniApiHelper.getX509(sicurezzaMessaggioRichiesta.getRiferimentoX509()));
  1737.        
  1738.         if(sicurezzaMessaggioRichiesta.getTruststore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  1739.            
  1740.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);

  1741.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, "");
  1742.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, "");
  1743.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, "");
  1744.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, "");
  1745.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, "");
  1746.            
  1747.         } else {
  1748.            
  1749.             ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito)sicurezzaMessaggioRichiesta.getTruststore();
  1750.            
  1751.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  1752.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, truststoreRidefinito.getTruststoreCrl());
  1753.             if(truststoreRidefinito.getTruststoreOcspPolicy()!=null) {
  1754.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, truststoreRidefinito.getTruststoreOcspPolicy());
  1755.             }
  1756.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, truststoreRidefinito.getTruststorePassword());
  1757.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, truststoreRidefinito.getTruststorePath());
  1758.            
  1759.             String tipo = null;
  1760.             switch(truststoreRidefinito.getTruststoreTipo()) {
  1761.             case JKS:tipo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE_VALUE_JKS;
  1762.                 break;
  1763.             case PKCS11:
  1764.                 tipo = truststoreRidefinito.getPcks11Tipo();
  1765.                 if(tipo==null) {
  1766.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  1767.                 }
  1768.                 break;
  1769.             case PDND:
  1770.                 tipo = truststoreRidefinito.getPdndTipo();
  1771.                 if(tipo==null) {
  1772.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_NON_INDICATO);
  1773.                 }
  1774.                 if(!isModITrustStoreSafe(tipo)) {
  1775.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_SCONOSCIUTO_PREFIX+tipo);
  1776.                 }
  1777.                 break;
  1778.             default:
  1779.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX+truststoreRidefinito.getTruststoreTipo());
  1780.             }
  1781.            
  1782.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, tipo);

  1783.         }

  1784.         if(sicurezzaMessaggioRichiesta.getTruststoreSsl()!=null) {
  1785.             if(sicurezzaMessaggioRichiesta.getTruststoreSsl().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  1786.                
  1787.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);
  1788.    
  1789.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, "");
  1790.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, "");
  1791.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, "");
  1792.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, "");
  1793.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, "");
  1794.                
  1795.             } else {
  1796.                
  1797.                 ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito)sicurezzaMessaggioRichiesta.getTruststoreSsl();
  1798.                
  1799.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  1800.    
  1801.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, truststoreRidefinito.getTruststoreCrl());
  1802.                 if(truststoreRidefinito.getTruststoreOcspPolicy()!=null) {
  1803.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, truststoreRidefinito.getTruststoreOcspPolicy());
  1804.                 }
  1805.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, truststoreRidefinito.getTruststorePassword());
  1806.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, truststoreRidefinito.getTruststorePath());
  1807.                
  1808.                 String tipo = null;
  1809.                 switch(truststoreRidefinito.getTruststoreTipo()) {
  1810.                 case JKS:tipo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS;
  1811.                     break;
  1812.                 case PKCS11:
  1813.                     tipo = truststoreRidefinito.getPcks11Tipo();
  1814.                     if(tipo==null) {
  1815.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  1816.                     }
  1817.                     break;
  1818.                 case PDND:
  1819.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_NON_SUPPORTATO_SSL);
  1820.                 default:
  1821.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX+truststoreRidefinito.getTruststoreTipo());
  1822.                 }
  1823.                
  1824.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, tipo);
  1825.    
  1826.             }
  1827.         }

  1828.         if(sicurezzaMessaggioRichiesta.getTimeToLive()!=null && sicurezzaMessaggioRichiesta.getTimeToLive()>0) {
  1829.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  1830.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT_SECONDS,  sicurezzaMessaggioRichiesta.getTimeToLive());
  1831.         }
  1832.         else {
  1833.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT, ModICostanti.MODIPA_PROFILO_DEFAULT);
  1834.         }

  1835.         if(sicurezzaMessaggioRichiesta.getAudience()!=null) {
  1836.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, sicurezzaMessaggioRichiesta.getAudience());
  1837.         } else {
  1838.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, "");
  1839.         }

  1840.         // contemporaneita'
  1841.        
  1842.         if(sicurezzaMessaggioRichiesta.getContemporaneita()!=null) {
  1843.            
  1844.             if(!erogazioneConf.sicurezzaMessaggioHeaderDuplicatiAbilitato) {
  1845.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'API implementata non risulta configurata per gestire la contemporaneità dei token AGID che servirebbe alle opzioni indicate per la richiesta");
  1846.             }
  1847.            
  1848.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo()!=null) {
  1849.                 switch (sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo()) {
  1850.                 case AGID:
  1851.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI,
  1852.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_MODI);
  1853.                     break;
  1854.                 case BEARER:
  1855.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI,
  1856.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_AUTHORIZATION);
  1857.                     break;
  1858.                 default:
  1859.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(richiesta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo sconosciuta: "+sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo());
  1860.                 }              
  1861.             }
  1862.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()!=null) {
  1863.                 switch (sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()) {
  1864.                 case SAME:
  1865.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE,
  1866.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME);
  1867.                     break;
  1868.                 case DIFFERENT:
  1869.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE,
  1870.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT);
  1871.                     break;
  1872.                 default:
  1873.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(richiesta - contemporaneità dei token AGID) Modalità di gestione dell'audience sconosciuta: "+sicurezzaMessaggioRichiesta.getContemporaneita().getAudience());
  1874.                 }
  1875.                 if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()) &&
  1876.                         sicurezzaMessaggioRichiesta.getContemporaneita().getAudienceAtteso()!=null) {
  1877.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY,
  1878.                             sicurezzaMessaggioRichiesta.getContemporaneita().getAudienceAtteso());
  1879.                 }
  1880.             }
  1881.         }
  1882.        
  1883.        
  1884.         // informazioni audit
  1885.        
  1886.         if(sicurezzaMessaggioRichiesta.getAudit()!=null &&
  1887.             sicurezzaMessaggioRichiesta.getAudit().getAudience()!=null) {
  1888.             switch (sicurezzaMessaggioRichiesta.getAudit().getAudience()) {
  1889.             case SAME:
  1890.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  1891.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTE_AUDIT_AUDIENCE_VALUE_SAME);
  1892.                 break;
  1893.             case DIFFERENT:
  1894.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  1895.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT);
  1896.                 if(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso()==null || StringUtils.isEmpty(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso())) {
  1897.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Audience di audit non definito");
  1898.                 }
  1899.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT,
  1900.                         sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso());
  1901.                 break;
  1902.             default:
  1903.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Modalità di gestione dell'audience di audit sconosciuta: "+sicurezzaMessaggioRichiesta.getAudit().getAudience());
  1904.             }
  1905.         }
  1906.     }
  1907.    
  1908.     private static void fillErogazioneRESTRispostaProperties(ErogazioneModIRest modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {

  1909.         ErogazioneModIRestRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = modi.getRisposta().getSicurezzaMessaggio();
  1910.        
  1911.         String algo = null;
  1912.         if(sicurezzaMessaggioRisposta.getAlgoritmo()!= null) {
  1913.             switch(sicurezzaMessaggioRisposta.getAlgoritmo()) {
  1914.             case ES256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES256;
  1915.                 break;
  1916.             case ES384: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES384;
  1917.                 break;
  1918.             case ES512: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES512;
  1919.                 break;
  1920.             case RS256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256;
  1921.                 break;
  1922.             case RS384: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS384;
  1923.                 break;
  1924.             case RS512: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS512;
  1925.                 break;
  1926.             default:
  1927.                 break;
  1928.             }
  1929.         } else {
  1930.             algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256;
  1931.         }
  1932.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_ALG, algo);
  1933.        
  1934.         if(sicurezzaMessaggioRisposta.getHeaderHttpFirmare()!=null) {
  1935.             String httpHeaders = String.join(",", sicurezzaMessaggioRisposta.getHeaderHttpFirmare());
  1936.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, httpHeaders);
  1937.         }
  1938.         else {
  1939.             // viene applicato il default
  1940.             try {
  1941.                 String httpHeaders = ModIProperties.getInstance().getRestSecurityTokenSignedHeadersAsString();
  1942.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, httpHeaders);
  1943.             }catch(Exception e) {
  1944.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Recupero header http da firmare per default fallito: "+e.getMessage());
  1945.             }
  1946.         }
  1947.        
  1948.         if(sicurezzaMessaggioRisposta.getRiferimentoX509() == null || sicurezzaMessaggioRisposta.getRiferimentoX509().equals(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RICHIESTA)) {
  1949.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_TRUE);
  1950.         } else {
  1951.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_FALSE);
  1952.            
  1953.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509, ModiErogazioniApiHelper.getX509(sicurezzaMessaggioRisposta.getRiferimentoX509Risposta()));
  1954.         }
  1955.        
  1956.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN, sicurezzaMessaggioRisposta.isCertificateChain() != null && sicurezzaMessaggioRisposta.isCertificateChain().booleanValue()));
  1957.        
  1958.         if(sicurezzaMessaggioRisposta.getUrl()!=null) {
  1959.            
  1960.             if(!modi.getRichiesta().getSicurezzaMessaggio().getRiferimentoX509().contains(ModISicurezzaMessaggioRestRiferimentoX509.X5U)) {
  1961.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Impossibile settare URL X5U con riferimento x509 "+modi.getRichiesta().getSicurezzaMessaggio().getRiferimentoX509());
  1962.             }
  1963.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_X509_VALUE_X5URL, sicurezzaMessaggioRisposta.getUrl());
  1964.         } else {
  1965.             if(modi.getRichiesta().getSicurezzaMessaggio().getRiferimentoX509().contains(ModISicurezzaMessaggioRestRiferimentoX509.X5U)) {
  1966.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare URL X5U con riferimento x509 "+modi.getRichiesta().getSicurezzaMessaggio().getRiferimentoX509());
  1967.             }
  1968.         }

  1969.         if(sicurezzaMessaggioRisposta.getTimeToLive()!=null) {
  1970.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED, sicurezzaMessaggioRisposta.getTimeToLive());
  1971.         }
  1972.        
  1973.         if(sicurezzaMessaggioRisposta.getClaims()!=null && !sicurezzaMessaggioRisposta.getClaims().isEmpty()) {
  1974.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_JWT_CLAIMS, String.join("\n", sicurezzaMessaggioRisposta.getClaims()));
  1975.         }
  1976.        
  1977.         if(sicurezzaMessaggioRisposta.getKeystore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  1978.            
  1979.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);
  1980.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE);
  1981.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS);
  1982.             p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, "");
  1983.             p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, "");
  1984.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, "");
  1985.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_PATH, "");
  1986.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, "");
  1987.            
  1988.         } else {

  1989.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  1990.             ModIKeyStoreRidefinito keystoreRidefinito = (ModIKeyStoreRidefinito)sicurezzaMessaggioRisposta.getKeystore();
  1991.            
  1992.             if(keystoreRidefinito.getDatiKeystore().getTipologia().equals(ModIKeystoreTipologiaEnum.HSM)) {
  1993.                 ModIKeyStoreHSM hsmKeystore = (ModIKeyStoreHSM)keystoreRidefinito.getDatiKeystore();
  1994.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_HSM);

  1995.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, hsmKeystore.getPcks11Tipo());
  1996.                 p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, hsmKeystore.getKeyAlias());

  1997.             }
  1998.             else if(keystoreRidefinito.getDatiKeystore().getTipologia().equals(ModIKeystoreTipologiaEnum.FILESYSTEM)) {
  1999.                 ModIKeyStoreFile fsKeystore = (ModIKeyStoreFile)keystoreRidefinito.getDatiKeystore();
  2000.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_PATH);

  2001.                
  2002.                 String tipo = null;
  2003.                 switch(fsKeystore.getKeystoreTipo()) {
  2004.                 case JKS:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS;
  2005.                     break;
  2006.                 case PKCS12:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12;
  2007.                     break;
  2008.                 default:
  2009.                     break;
  2010.                 }
  2011.                
  2012.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, tipo);
  2013.                 p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, fsKeystore.getKeyAlias());
  2014.                 p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, fsKeystore.getKeyPassword());
  2015.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, fsKeystore.getKeystorePassword());
  2016.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_PATH, fsKeystore.getKeystorePath());
  2017.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, fsKeystore.getKeystoreByokPolicy());
  2018.             } else {
  2019.                 ModIKeyStoreArchive archiveKeystore = (ModIKeyStoreArchive)keystoreRidefinito.getDatiKeystore();
  2020.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE);

  2021.                
  2022.                 String tipo = null;
  2023.                 String filename = null;
  2024.                
  2025.                 switch(archiveKeystore.getKeystoreTipo()) {
  2026.                 case JKS:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS; filename = "Keystore.jks";
  2027.                     break;
  2028.                 case PKCS12:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12; filename = "Keystore.p12";
  2029.                     break;
  2030.                 default:
  2031.                     break;
  2032.                 }
  2033.                
  2034.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, tipo);
  2035.                 p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, archiveKeystore.getKeyAlias());
  2036.                 p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, archiveKeystore.getKeyPassword());
  2037.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, archiveKeystore.getKeystorePassword());
  2038.                 p.addProperty(ModICostanti.MODIPA_KEYSTORE_ARCHIVE, archiveKeystore.getKeystoreArchivio(), filename, filename);
  2039.             }
  2040.            
  2041.         }
  2042.        
  2043.         // contemporaneita'
  2044.        
  2045.         if(sicurezzaMessaggioRisposta.getContemporaneita()!=null) {
  2046.            
  2047.             if(!erogazioneConf.sicurezzaMessaggioHeaderDuplicatiAbilitato) {
  2048.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'API implementata non risulta configurata per gestire la contemporaneità dei token AGID che servirebbe alle opzioni indicate per la risposta");
  2049.             }
  2050.            
  2051.             if(sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo()!=null) {
  2052.                 switch (sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo()) {
  2053.                 case SAME:
  2054.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI,
  2055.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME);
  2056.                     break;
  2057.                 case DIFFERENT:
  2058.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI,
  2059.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT);
  2060.                     break;
  2061.                 default:
  2062.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(risposta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo sconosciuta: "+sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo());
  2063.                 }
  2064.                 if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo()) &&
  2065.                         sicurezzaMessaggioRisposta.getContemporaneita().getUsaComeIdMessaggio()!=null) {
  2066.                     switch (sicurezzaMessaggioRisposta.getContemporaneita().getUsaComeIdMessaggio()) {
  2067.                     case AGID:
  2068.                         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO,
  2069.                                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_MODI);
  2070.                         break;
  2071.                     case BEARER:
  2072.                         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO,
  2073.                                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_AUTHORIZATION);
  2074.                         break;
  2075.                     default:
  2076.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("(risposta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo da usare come filtro duplicati sconosciuta: "+sicurezzaMessaggioRisposta.getContemporaneita().getUsaComeIdMessaggio());
  2077.                     }  
  2078.                 }
  2079.             }
  2080.            
  2081.             if(sicurezzaMessaggioRisposta.getContemporaneita().getClaimsBearer()!=null && !sicurezzaMessaggioRisposta.getContemporaneita().getClaimsBearer().isEmpty()) {
  2082.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION,
  2083.                         String.join("\n", sicurezzaMessaggioRisposta.getContemporaneita().getClaimsBearer()));
  2084.             }
  2085.             if(sicurezzaMessaggioRisposta.getContemporaneita().getClaimsAgid()!=null && !sicurezzaMessaggioRisposta.getContemporaneita().getClaimsAgid().isEmpty()) {
  2086.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_JWT_CLAIMS_MODI,
  2087.                         String.join("\n", sicurezzaMessaggioRisposta.getContemporaneita().getClaimsAgid()));
  2088.             }
  2089.         }
  2090.     }
  2091.    
  2092.     private static void getRESTProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ErogazioneModIRest modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {

  2093.         if(!erogazioneConf.sicurezzaMessaggioAPIAbilitata) {
  2094.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.IMPOSSIBILE_ABILITARE_SICUREZZA);
  2095.         }

  2096.         if (ModISecurityUtils.isSicurezzaMessaggioRequired(aspc, asps.getPortType())) {
  2097.            
  2098.             if (modi == null || modi.getRichiesta() == null || modi.getRisposta() == null)
  2099.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SICUREZZA_MESSAGGIO_NON_PRESENTE);
  2100.            
  2101.             // **** richiesta ****
  2102.             ModiErogazioniApiHelper.fillErogazioneRESTRichiestaProperties(modi, p, erogazioneConf);
  2103.            
  2104.             // **** risposta ****
  2105.             ModiErogazioniApiHelper.fillErogazioneRESTRispostaProperties(modi, p, erogazioneConf);
  2106.         } else {
  2107.             if (modi != null && (modi.getRichiesta() != null || modi.getRisposta() != null))
  2108.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SICUREZZA_MESSAGGIO_NON_NECESSARIA);
  2109.         }
  2110.        
  2111.         if(modi!=null) {
  2112.             ModiErogazioniApiHelper.fillErogazioneModIInfoGenerali(p, modi.getInformazioniGenerali());
  2113.         }
  2114.     }
  2115.    
  2116.     private static void getRESTProperties(FruizioneModIRest modi, ProtocolProperties p, FruizioneConf fruizioneConf) {

  2117.         if(!fruizioneConf.sicurezzaMessaggioAPIAbilitata) {
  2118.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.IMPOSSIBILE_ABILITARE_SICUREZZA);
  2119.         }

  2120.         // **** richiesta ****
  2121.        
  2122.         FruizioneModIRestRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = modi.getRichiesta().getSicurezzaMessaggio();
  2123.        
  2124.         String algo = null;
  2125.         if(sicurezzaMessaggioRichiesta.getAlgoritmo()!= null) {
  2126.             switch(sicurezzaMessaggioRichiesta.getAlgoritmo()) {
  2127.             case ES256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES256;
  2128.                 break;
  2129.             case ES384: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES384;
  2130.                 break;
  2131.             case ES512: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_ES512;
  2132.                 break;
  2133.             case RS256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256;
  2134.                 break;
  2135.             case RS384: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS384;
  2136.                 break;
  2137.             case RS512: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS512;
  2138.                 break;
  2139.             default:
  2140.                 break;
  2141.             }
  2142.         } else {
  2143.             algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_ALG_RS256;
  2144.         }
  2145.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_ALG, algo);
  2146.        
  2147.         if(sicurezzaMessaggioRichiesta.getHeaderHttpFirmare()!=null) {
  2148.             String httpHeaders = String.join(",", sicurezzaMessaggioRichiesta.getHeaderHttpFirmare());
  2149.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, httpHeaders);
  2150.         }
  2151.         else {
  2152.             // viene applicato il default
  2153.             try {
  2154.                 String httpHeaders = ModIProperties.getInstance().getRestSecurityTokenSignedHeadersAsString();
  2155.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST, httpHeaders);
  2156.             }catch(Exception e) {
  2157.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Recupero header http da firmare per default fallito: "+e.getMessage());
  2158.             }
  2159.         }
  2160.        
  2161.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509, ModiErogazioniApiHelper.getX509(sicurezzaMessaggioRichiesta.getRiferimentoX509()));

  2162.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN, sicurezzaMessaggioRichiesta.isCertificateChain() != null && sicurezzaMessaggioRichiesta.isCertificateChain().booleanValue()));
  2163.    
  2164.         if(sicurezzaMessaggioRichiesta.getTimeToLive()!=null) {
  2165.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_EXPIRED, sicurezzaMessaggioRichiesta.getTimeToLive());
  2166.         }
  2167.        
  2168.         if(sicurezzaMessaggioRichiesta.getAudience()!=null) {
  2169.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, sicurezzaMessaggioRichiesta.getAudience());
  2170.         } else {
  2171.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, "");
  2172.         }

  2173.         if(sicurezzaMessaggioRichiesta.getClaims()!=null && !sicurezzaMessaggioRichiesta.getClaims().isEmpty()) {
  2174.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_JWT_CLAIMS, String.join("\n", sicurezzaMessaggioRichiesta.getClaims()));
  2175.         }
  2176.        
  2177.        
  2178.         // keystore
  2179.        
  2180.         if(sicurezzaMessaggioRichiesta.getKeystore()!=null) {
  2181.            
  2182.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE);
  2183.            
  2184.             if(sicurezzaMessaggioRichiesta.getKeystore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2185.                
  2186.                 ModiErogazioniApiHelper.setKeystoreDefaultProperties(p);
  2187.                
  2188.             } else {

  2189.                 ModIKeyStoreRidefinito keystoreRidefinito = (ModIKeyStoreRidefinito)sicurezzaMessaggioRichiesta.getKeystore();
  2190.                 ModiErogazioniApiHelper.setKeystoreRidefinitoProperties(p, keystoreRidefinito);
  2191.                
  2192.             }
  2193.         }
  2194.         else {
  2195.            
  2196.             if(sicurezzaMessaggioRichiesta.isKeystoreTokenPolicy()!=null && sicurezzaMessaggioRichiesta.isKeystoreTokenPolicy().booleanValue()) {
  2197.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_TOKEN_POLICY);
  2198.             }
  2199.             else {
  2200.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_APPLICATIVO);
  2201.             }
  2202.            
  2203.         }
  2204.        

  2205.         // informazione utente
  2206.        
  2207.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteCodiceEnte(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE);
  2208.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteUserid(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER);
  2209.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteIndirizzoIp(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER);
  2210.        
  2211.         // informazioni audit
  2212.        
  2213.         List<String> infoAuditRequired = ModiErogazioniApiHelper.getInformazioniAuditRequired(fruizioneConf.schemaAudit);
  2214.        
  2215.         if(sicurezzaMessaggioRichiesta.getAudit()!=null) {
  2216.            
  2217.             if(sicurezzaMessaggioRichiesta.getAudit().getAudience()!=null) {
  2218.                 switch (sicurezzaMessaggioRichiesta.getAudit().getAudience()) {
  2219.                 case SAME:
  2220.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2221.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTE_AUDIT_AUDIENCE_VALUE_SAME);
  2222.                     break;
  2223.                 case DIFFERENT:
  2224.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2225.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT);
  2226.                     if(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso()==null || StringUtils.isEmpty(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso())) {
  2227.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Audience di audit non definito");
  2228.                     }
  2229.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT,
  2230.                             sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso());
  2231.                     break;
  2232.                 default:
  2233.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Modalità di gestione dell'audience di audit sconosciuta: "+sicurezzaMessaggioRichiesta.getAudit().getAudience());
  2234.                 }
  2235.             }
  2236.            
  2237.             if(sicurezzaMessaggioRichiesta.getAudit().getInformazioni()!=null && !sicurezzaMessaggioRichiesta.getAudit().getInformazioni().isEmpty()) {
  2238.                
  2239.                 List<String> claimsDefiniti = ModiErogazioniApiHelper.getInformazioniAudit(fruizioneConf.schemaAudit);
  2240.                
  2241.                 for (FruizioneModIRichiestaInformazioneUtenteAudit info : sicurezzaMessaggioRichiesta.getAudit().getInformazioni()) {
  2242.                     if(info!=null) {
  2243.                         ModiErogazioniApiHelper.addInformazioniUtente(info, p, fruizioneConf, claimsDefiniti);      
  2244.                         infoAuditRequired.remove(info.getNome());
  2245.                     }
  2246.                 }
  2247.             }
  2248.            
  2249.         }
  2250.        
  2251.         if(!infoAuditRequired.isEmpty()) {
  2252.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'audit definito nella API richiede la definizione delle seguenti informazioni: "+infoAuditRequired);
  2253.         }
  2254.        
  2255.         // contemporaneita'
  2256.        
  2257.         if(sicurezzaMessaggioRichiesta.getContemporaneita()!=null) {
  2258.            
  2259.             if(!fruizioneConf.sicurezzaMessaggioHeaderDuplicatiAbilitato) {
  2260.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'API implementata non risulta configurata per gestire la contemporaneità dei token AGID che servirebbe alle opzioni indicate per la richiesta");
  2261.             }
  2262.            
  2263.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo()!=null) {
  2264.                 switch (sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo()) {
  2265.                 case SAME:
  2266.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI,
  2267.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME);
  2268.                     break;
  2269.                 case DIFFERENT:
  2270.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI,
  2271.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT);
  2272.                     break;
  2273.                 default:
  2274.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(richiesta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo sconosciuta: "+sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo());
  2275.                 }
  2276.                 if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(sicurezzaMessaggioRichiesta.getContemporaneita().getIdentificativo()) &&
  2277.                         sicurezzaMessaggioRichiesta.getContemporaneita().getUsaComeIdMessaggio()!=null) {
  2278.                     switch (sicurezzaMessaggioRichiesta.getContemporaneita().getUsaComeIdMessaggio()) {
  2279.                     case AGID:
  2280.                         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO,
  2281.                                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_MODI);
  2282.                         break;
  2283.                     case BEARER:
  2284.                         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO,
  2285.                                 ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_JTI_AS_ID_MESSAGGIO_VALUE_AUTHORIZATION);
  2286.                         break;
  2287.                     default:
  2288.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("(richiesta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo come filtro duplicati sconosciuta: "+sicurezzaMessaggioRichiesta.getContemporaneita().getUsaComeIdMessaggio());
  2289.                     }  
  2290.                 }
  2291.             }
  2292.            
  2293.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()!=null) {
  2294.                 switch (sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()) {
  2295.                 case SAME:
  2296.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE,
  2297.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME);
  2298.                     break;
  2299.                 case DIFFERENT:
  2300.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE,
  2301.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT);
  2302.                     break;
  2303.                 default:
  2304.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(richiesta - contemporaneità dei token AGID) Modalità di gestione dell'audience sconosciuta: "+sicurezzaMessaggioRichiesta.getContemporaneita().getAudience());
  2305.                 }
  2306.                 if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(sicurezzaMessaggioRichiesta.getContemporaneita().getAudience()) &&
  2307.                         sicurezzaMessaggioRichiesta.getContemporaneita().getAudienceAtteso()!=null) {
  2308.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY,
  2309.                             sicurezzaMessaggioRichiesta.getContemporaneita().getAudienceAtteso());
  2310.                 }
  2311.             }
  2312.            
  2313.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsBearer()!=null && !sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsBearer().isEmpty()) {
  2314.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION,
  2315.                         String.join("\n", sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsBearer()));
  2316.             }
  2317.             if(sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsAgid()!=null && !sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsAgid().isEmpty()) {
  2318.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_JWT_CLAIMS_MODI,
  2319.                         String.join("\n", sicurezzaMessaggioRichiesta.getContemporaneita().getClaimsAgid()));
  2320.             }
  2321.         }
  2322.        
  2323.         // oauth
  2324.        
  2325.         if(modi.getRichiesta().getOauth()!=null) {
  2326.             if(modi.getRichiesta().getOauth().getIdentificativo()!=null && StringUtils.isNotEmpty(modi.getRichiesta().getOauth().getIdentificativo())) {
  2327.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, modi.getRichiesta().getOauth().getIdentificativo());
  2328.             }
  2329.             if(modi.getRichiesta().getOauth().getKid()!=null && StringUtils.isNotEmpty(modi.getRichiesta().getOauth().getKid())) {
  2330.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, modi.getRichiesta().getOauth().getKid());
  2331.             }
  2332.         }
  2333.        
  2334.         // **** risposta ****
  2335.        
  2336.         FruizioneModIRestRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = modi.getRisposta().getSicurezzaMessaggio();
  2337.        
  2338.         if(sicurezzaMessaggioRisposta.getRiferimentoX509() == null || sicurezzaMessaggioRisposta.getRiferimentoX509().equals(ModISicurezzaMessaggioRestRiferimentoX509Risposta.RICHIESTA)) {
  2339.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_TRUE);
  2340.         } else {
  2341.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_AS_REQUEST_VALUE_FALSE);
  2342.            
  2343.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509, ModiErogazioniApiHelper.getX509(sicurezzaMessaggioRisposta.getRiferimentoX509Risposta()));
  2344.         }

  2345.         if(sicurezzaMessaggioRisposta.getTruststore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2346.            
  2347.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);

  2348.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, "");
  2349.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, "");
  2350.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, "");
  2351.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, "");
  2352.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, "");
  2353.            
  2354.         } else {
  2355.            
  2356.             ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito)sicurezzaMessaggioRisposta.getTruststore();
  2357.            
  2358.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  2359.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, truststoreRidefinito.getTruststoreCrl());
  2360.             if(truststoreRidefinito.getTruststoreOcspPolicy()!=null) {
  2361.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, truststoreRidefinito.getTruststoreOcspPolicy());
  2362.             }
  2363.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, truststoreRidefinito.getTruststorePassword());
  2364.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, truststoreRidefinito.getTruststorePath());
  2365.            
  2366.             String tipo = null;
  2367.             switch(truststoreRidefinito.getTruststoreTipo()) {
  2368.             case JKS:tipo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE_VALUE_JKS;
  2369.                 break;
  2370.             case PKCS11:
  2371.                 tipo = truststoreRidefinito.getPcks11Tipo();
  2372.                 if(tipo==null) {
  2373.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  2374.                 }
  2375.                 break;
  2376.             case PDND:
  2377.                 tipo = truststoreRidefinito.getPdndTipo();
  2378.                 if(tipo==null) {
  2379.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_NON_INDICATO);
  2380.                 }
  2381.                 if(!isModITrustStoreSafe(tipo)) {
  2382.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_SCONOSCIUTO_PREFIX+tipo);
  2383.                 }
  2384.                 break;
  2385.             default:
  2386.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX+truststoreRidefinito.getTruststoreTipo());
  2387.             }
  2388.            
  2389.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, tipo);

  2390.         }

  2391.         if(sicurezzaMessaggioRisposta.getTruststoreSsl()!=null) {
  2392.             if(sicurezzaMessaggioRisposta.getTruststoreSsl().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2393.                
  2394.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);
  2395.    
  2396.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, "");
  2397.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, "");
  2398.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, "");
  2399.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, "");
  2400.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, "");
  2401.                
  2402.             } else {
  2403.                
  2404.                 ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito)sicurezzaMessaggioRisposta.getTruststoreSsl();
  2405.                
  2406.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  2407.    
  2408.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS, truststoreRidefinito.getTruststoreCrl());
  2409.                 if(truststoreRidefinito.getTruststoreOcspPolicy()!=null) {
  2410.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY, truststoreRidefinito.getTruststoreOcspPolicy());
  2411.                 }
  2412.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, truststoreRidefinito.getTruststorePassword());
  2413.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH, truststoreRidefinito.getTruststorePath());
  2414.                
  2415.                 String tipo = null;
  2416.                 switch(truststoreRidefinito.getTruststoreTipo()) {
  2417.                 case JKS:tipo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS;
  2418.                     break;
  2419.                 case PKCS11:
  2420.                     tipo = truststoreRidefinito.getPcks11Tipo();
  2421.                     if(tipo==null) {
  2422.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  2423.                     }
  2424.                     break;
  2425.                 case PDND:
  2426.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_NON_SUPPORTATO_SSL);                  
  2427.                 default:
  2428.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX+truststoreRidefinito.getTruststoreTipo());
  2429.                 }
  2430.                
  2431.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE, tipo);
  2432.    
  2433.             }
  2434.         }
  2435.        
  2436.         if(sicurezzaMessaggioRisposta.getTimeToLive()!=null && sicurezzaMessaggioRisposta.getTimeToLive()>0) {
  2437.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  2438.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT_SECONDS,  sicurezzaMessaggioRisposta.getTimeToLive());
  2439.         }
  2440.         else {
  2441.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, ModICostanti.MODIPA_PROFILO_DEFAULT);
  2442.         }

  2443.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, sicurezzaMessaggioRisposta.isVerificaAudience()!=null && sicurezzaMessaggioRisposta.isVerificaAudience().booleanValue()));
  2444.         if(sicurezzaMessaggioRisposta.isVerificaAudience()!=null && sicurezzaMessaggioRisposta.isVerificaAudience() && sicurezzaMessaggioRisposta.getAudienceAtteso()!=null) {
  2445.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE_VALORE, sicurezzaMessaggioRisposta.getAudienceAtteso());
  2446.         }
  2447.        
  2448.         // contemporaneita'
  2449.        
  2450.         if(sicurezzaMessaggioRisposta.getContemporaneita()!=null) {
  2451.            
  2452.             if(!fruizioneConf.sicurezzaMessaggioHeaderDuplicatiAbilitato) {
  2453.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'API implementata non risulta configurata per gestire la contemporaneità dei token AGID che servirebbe alle opzioni indicate per la risposta");
  2454.             }
  2455.            
  2456.             if(sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo()!=null) {
  2457.                 switch (sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo()) {
  2458.                 case AGID:
  2459.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI,
  2460.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_MODI);
  2461.                     break;
  2462.                 case BEARER:
  2463.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_FILTRO_DUPLICATI,
  2464.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_FILTRO_DUPLICATI_VALUE_AUTHORIZATION);
  2465.                     break;
  2466.                 default:
  2467.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(risposta - contemporaneità dei token AGID) Modalità di gestione dell'identificativo sconosciuta: "+sicurezzaMessaggioRisposta.getContemporaneita().getIdentificativo());
  2468.                 }              
  2469.             }
  2470.             if(sicurezzaMessaggioRisposta.getContemporaneita().getAudience()!=null) {
  2471.                 switch (sicurezzaMessaggioRisposta.getContemporaneita().getAudience()) {
  2472.                 case SAME:
  2473.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE,
  2474.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_SAME);
  2475.                     break;
  2476.                 case DIFFERENT:
  2477.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE,
  2478.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT);
  2479.                     break;
  2480.                 default:
  2481.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("(risposta - contemporaneità dei token AGID) Modalità di gestione dell'audience sconosciuta: "+sicurezzaMessaggioRisposta.getContemporaneita().getAudience());
  2482.                 }
  2483.                 if(ModISicurezzaMessaggioRestSameDifferentEnum.DIFFERENT.equals(sicurezzaMessaggioRisposta.getContemporaneita().getAudience()) &&
  2484.                         sicurezzaMessaggioRisposta.getContemporaneita().getAudienceAtteso()!=null) {
  2485.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY,
  2486.                             sicurezzaMessaggioRisposta.getContemporaneita().getAudienceAtteso());
  2487.                 }
  2488.             }
  2489.         }
  2490.        
  2491.     }

  2492.     private static void addInformazioniUtente(FruizioneModIRichiestaInformazioneUtente informazioniUtenteField, ProtocolProperties p, FruizioneConf fruizioneConf, String modalitaString, String valueString) {
  2493.         if(informazioniUtenteField!= null) {
  2494.             if(fruizioneConf.informazioniUtenteAbilitato) {

  2495.                 if(informazioniUtenteField.getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2496.                     p.addProperty(modalitaString, ModICostanti.MODIPA_PROFILO_DEFAULT);
  2497.                     p.addProperty(valueString, "");
  2498.                 } else {
  2499.                     p.addProperty(modalitaString, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  2500.                     p.addProperty(valueString, informazioniUtenteField.getValore());
  2501.                 }
  2502.             } else {
  2503.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Impossibile settare info utente");
  2504.             }
  2505.         }
  2506.     }
  2507.    
  2508.     private static void addInformazioniUtente(FruizioneModIRichiestaInformazioneUtenteAudit informazioniUtenteField, ProtocolProperties p, FruizioneConf fruizioneConf, List<String> claimsDefiniti) {
  2509.         if(informazioniUtenteField!= null) {
  2510.             if(fruizioneConf.informazioniUtenteAbilitato) {

  2511.                 String nome = informazioniUtenteField.getNome();
  2512.                
  2513.                 boolean find = claimsDefiniti.contains(nome);
  2514.                 if(!find) {
  2515.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Impossibile settare info audit '"+nome+"': non risulta esistere una informazione con il nome indicato");
  2516.                 }
  2517.                
  2518.                 if(informazioniUtenteField.getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2519.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX+nome, ModICostanti.MODIPA_PROFILO_DEFAULT);
  2520.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_PREFIX+nome, "");
  2521.                 } else {
  2522.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX+nome, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  2523.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_PREFIX+nome, informazioniUtenteField.getValore());
  2524.                 }
  2525.             } else {
  2526.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Impossibile settare info audit");
  2527.             }
  2528.         }
  2529.     }

  2530.     private static String getX509(List<ModISicurezzaMessaggioRestRiferimentoX509> rif) {
  2531.         List<String> sX509 = new ArrayList<>();
  2532.        
  2533.         if(rif.contains(ModISicurezzaMessaggioRestRiferimentoX509.X5C)) {
  2534.             sX509.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RIFERIMENTO_X509_VALUE_X5C);
  2535.         }
  2536.         if(rif.contains(ModISicurezzaMessaggioRestRiferimentoX509.X5T_256)) {
  2537.             sX509.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RIFERIMENTO_X509_VALUE_X5T);
  2538.         }
  2539.         if(rif.contains(ModISicurezzaMessaggioRestRiferimentoX509.X5U)) {
  2540.             sX509.add(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RIFERIMENTO_X509_VALUE_X5U);
  2541.         }
  2542.        
  2543.         return String.join(",", sX509);
  2544.     }

  2545.    
  2546.     private static void fillErogazioneSOAPRichiestaProperties(ErogazioneModISoap modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {
  2547.         // **** richiesta ****
  2548.         ErogazioneModISoapRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = modi.getRichiesta()
  2549.                 .getSicurezzaMessaggio();

  2550.         if (sicurezzaMessaggioRichiesta.getTruststore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {

  2551.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE,
  2552.                     ModICostanti.MODIPA_PROFILO_DEFAULT);

  2553.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, "");
  2554.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, "");
  2555.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, "");
  2556.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, "");
  2557.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, "");

  2558.         } else {

  2559.             ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito) sicurezzaMessaggioRichiesta
  2560.                     .getTruststore();

  2561.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE,
  2562.                     ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  2563.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS,
  2564.                     truststoreRidefinito.getTruststoreCrl());
  2565.             if (truststoreRidefinito.getTruststoreOcspPolicy() != null) {
  2566.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY,
  2567.                         truststoreRidefinito.getTruststoreOcspPolicy());
  2568.             }
  2569.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD,
  2570.                     truststoreRidefinito.getTruststorePassword());
  2571.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH,
  2572.                     truststoreRidefinito.getTruststorePath());

  2573.             String tipo = null;
  2574.             switch (truststoreRidefinito.getTruststoreTipo()) {
  2575.             case JKS:
  2576.                 tipo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE_VALUE_JKS;
  2577.                 break;
  2578.             case PKCS11:
  2579.                 tipo = truststoreRidefinito.getPcks11Tipo();
  2580.                 if (tipo == null) {
  2581.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  2582.                 }
  2583.                 break;
  2584.             case PDND:
  2585.                 tipo = truststoreRidefinito.getPdndTipo();
  2586.                 if(tipo==null) {
  2587.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_NON_INDICATO);
  2588.                 }
  2589.                 if(!isModITrustStoreSafe(tipo)) {
  2590.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_SCONOSCIUTO_PREFIX+tipo);
  2591.                 }
  2592.                 break;
  2593.             default:
  2594.                 throw FaultCode.RICHIESTA_NON_VALIDA
  2595.                         .toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX + truststoreRidefinito.getTruststoreTipo());
  2596.             }

  2597.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, tipo);

  2598.         }

  2599.         if (sicurezzaMessaggioRichiesta.getTimeToLive() != null && sicurezzaMessaggioRichiesta.getTimeToLive() > 0) {
  2600.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT,
  2601.                     ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  2602.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT_SECONDS,
  2603.                     sicurezzaMessaggioRichiesta.getTimeToLive());
  2604.         } else {
  2605.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT,
  2606.                     ModICostanti.MODIPA_PROFILO_DEFAULT);
  2607.         }

  2608.         if (sicurezzaMessaggioRichiesta.getWsaTo() != null) {
  2609.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE,
  2610.                     sicurezzaMessaggioRichiesta.getWsaTo());
  2611.         } else {
  2612.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, "");
  2613.         }

  2614.         // informazioni audit

  2615.         if (sicurezzaMessaggioRichiesta.getAudit() != null
  2616.                 && sicurezzaMessaggioRichiesta.getAudit().getAudience() != null) {
  2617.             switch (sicurezzaMessaggioRichiesta.getAudit().getAudience()) {
  2618.             case SAME:
  2619.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2620.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTE_AUDIT_AUDIENCE_VALUE_SAME);
  2621.                 break;
  2622.             case DIFFERENT:
  2623.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2624.                         ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT);
  2625.                 if (sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso() == null
  2626.                         || StringUtils.isEmpty(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso())) {
  2627.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Audience di audit non definito");
  2628.                 }
  2629.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT,
  2630.                         sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso());
  2631.                 break;
  2632.             default:
  2633.                 throw FaultCode.RICHIESTA_NON_VALIDA
  2634.                         .toException("Modalità di gestione dell'audience di audit sconosciuta: "
  2635.                                 + sicurezzaMessaggioRichiesta.getAudit().getAudience());
  2636.             }
  2637.         }
  2638.     }
  2639.    
  2640.     private static void fillErogazioneSOAPRispostaProperties(ErogazioneModISoap modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {

  2641.         ErogazioneModISoapRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = modi.getRisposta().getSicurezzaMessaggio();
  2642.        
  2643.         String algo = null;
  2644.         if(sicurezzaMessaggioRisposta.getAlgoritmo()!= null) {
  2645.             switch(sicurezzaMessaggioRisposta.getAlgoritmo()) {
  2646.             case DSA_SHA_256:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_DSA_SHA_256;
  2647.                 break;
  2648.             case ECDSA_SHA_256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256;
  2649.                 break;
  2650.             case ECDSA_SHA_384:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_384;
  2651.                 break;
  2652.             case ECDSA_SHA_512:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_512;
  2653.                 break;
  2654.             case RSA_SHA_256:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_256;
  2655.                 break;
  2656.             case RSA_SHA_384:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_384;
  2657.                 break;
  2658.             case RSA_SHA_512:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_512;
  2659.                 break;
  2660.             default:
  2661.                 break;}
  2662.         } else {
  2663.             algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256;
  2664.         }
  2665.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_ALG, algo);

  2666.         String canonic = null;
  2667.         if(sicurezzaMessaggioRisposta.getFormaCanonicaXml()!=null) {
  2668.             switch(sicurezzaMessaggioRisposta.getFormaCanonicaXml()) {
  2669.             case CANONICAL_XML_10:canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_10;
  2670.                 break;
  2671.             case CANONICAL_XML_11:canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_11;
  2672.                 break;
  2673.             case EXCLUSIVE_CANONICAL_XML_10: canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10;
  2674.                 break;
  2675.             default:
  2676.                 break;}
  2677.         } else {
  2678.             canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10;
  2679.         }
  2680.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_CANONICALIZATION_ALG, canonic);

  2681.         if(sicurezzaMessaggioRisposta.getHeaderSoapFirmare()!=null) {
  2682.             String soapHeaders = String.join("\n", sicurezzaMessaggioRisposta.getHeaderSoapFirmare());
  2683.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP, soapHeaders);
  2684.         }
  2685.        
  2686.         String rif509 = null;
  2687.         if(sicurezzaMessaggioRisposta.getRiferimentoX509()!= null) {
  2688.             switch(sicurezzaMessaggioRisposta.getRiferimentoX509()) {
  2689.             case BINARY_SECURITY_TOKEN: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN;
  2690.                 break;
  2691.             case ISSUER_SERIAL_SECURITY_TOKEN_REFERENCE: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_SECURITY_TOKEN_REFERENCE;
  2692.                 break;
  2693.             case SKI_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_SKI;
  2694.                 break;
  2695.             case THUMBPRINT_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_THUMBPRINT;
  2696.                 break;
  2697.             case X509_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_X509;
  2698.                 break;
  2699.             default:
  2700.             }
  2701.         } else {
  2702.             rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN;
  2703.         }
  2704.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509, rif509);
  2705.        
  2706.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN, sicurezzaMessaggioRisposta.isIncludiSignatureToken() != null && sicurezzaMessaggioRisposta.isIncludiSignatureToken().booleanValue() ));
  2707.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN, sicurezzaMessaggioRisposta.isCertificateChain() != null && sicurezzaMessaggioRisposta.isCertificateChain().booleanValue()));

  2708.         if(sicurezzaMessaggioRisposta.getTimeToLive()!=null) {
  2709.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED, sicurezzaMessaggioRisposta.getTimeToLive());
  2710.         } else {
  2711.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED, 300);
  2712.         }
  2713.        
  2714.         if(sicurezzaMessaggioRisposta.getKeystore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2715.            
  2716.             ModiErogazioniApiHelper.setKeystoreDefaultProperties(p);
  2717.            
  2718.         } else {

  2719.             ModIKeyStoreRidefinito keystoreRidefinito = (ModIKeyStoreRidefinito)sicurezzaMessaggioRisposta.getKeystore();
  2720.             ModiErogazioniApiHelper.setKeystoreRidefinitoProperties(p, keystoreRidefinito);
  2721.            
  2722.         }
  2723.     }
  2724.    
  2725.     private static void getSOAPProperties(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ErogazioneModISoap modi, ProtocolProperties p, ErogazioneConf erogazioneConf) {

  2726.         if(!erogazioneConf.sicurezzaMessaggioAPIAbilitata) {
  2727.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.IMPOSSIBILE_ABILITARE_SICUREZZA);
  2728.         }
  2729.        
  2730.         if (ModISecurityUtils.isSicurezzaMessaggioRequired(aspc, asps.getPortType())) {
  2731.             if (modi == null || modi.getRichiesta() == null || modi.getRisposta() == null)
  2732.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SICUREZZA_MESSAGGIO_NON_PRESENTE);
  2733.            
  2734.            
  2735.             // **** risposta ****
  2736.             ModiErogazioniApiHelper.fillErogazioneSOAPRichiestaProperties(modi, p, erogazioneConf);
  2737.            
  2738.             // **** risposta ****
  2739.             ModiErogazioniApiHelper.fillErogazioneSOAPRispostaProperties(modi, p, erogazioneConf);

  2740.         } else {
  2741.             if (modi != null && (modi.getRichiesta() != null || modi.getRisposta() != null))
  2742.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.SICUREZZA_MESSAGGIO_NON_NECESSARIA);
  2743.            
  2744.         }
  2745.        
  2746.         if(modi!=null) {
  2747.             ModiErogazioniApiHelper.fillErogazioneModIInfoGenerali(p, modi.getInformazioniGenerali());
  2748.         }
  2749.     }
  2750.    
  2751.     private static void setKeystoreDefaultProperties(ProtocolProperties p) {
  2752.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);
  2753.         p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE);
  2754.         p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS);
  2755.         p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, "");
  2756.         p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, "");
  2757.         p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, "");
  2758.         p.addProperty(ModICostanti.MODIPA_KEYSTORE_PATH, "");
  2759.         p.addProperty(ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, "");
  2760.     }
  2761.     private static void setKeystoreRidefinitoProperties(ProtocolProperties p, ModIKeyStoreRidefinito keystoreRidefinito) {
  2762.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  2763.         if(keystoreRidefinito.getDatiKeystore().getTipologia().equals(ModIKeystoreTipologiaEnum.HSM)) {
  2764.             ModIKeyStoreHSM hsmKeystore = (ModIKeyStoreHSM)keystoreRidefinito.getDatiKeystore();
  2765.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_HSM);

  2766.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, hsmKeystore.getPcks11Tipo());
  2767.             p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, hsmKeystore.getKeyAlias());

  2768.         }
  2769.         else if(keystoreRidefinito.getDatiKeystore().getTipologia().equals(ModIKeystoreTipologiaEnum.FILESYSTEM)) {
  2770.             ModIKeyStoreFile fsKeystore = (ModIKeyStoreFile)keystoreRidefinito.getDatiKeystore();
  2771.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_PATH);

  2772.            
  2773.             String tipo = null;
  2774.             switch(fsKeystore.getKeystoreTipo()) {
  2775.             case JKS:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS;
  2776.                 break;
  2777.             case PKCS12:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12;
  2778.                 break;
  2779.             default:
  2780.                 break;
  2781.             }
  2782.            
  2783.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, tipo);
  2784.             p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, fsKeystore.getKeyAlias());
  2785.             p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, fsKeystore.getKeyPassword());
  2786.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, fsKeystore.getKeystorePassword());
  2787.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_PATH, fsKeystore.getKeystorePath());
  2788.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_BYOK_POLICY, fsKeystore.getKeystoreByokPolicy());
  2789.         } else {
  2790.             ModIKeyStoreArchive archiveKeystore = (ModIKeyStoreArchive)keystoreRidefinito.getDatiKeystore();
  2791.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE);

  2792.            
  2793.             String tipo = null;
  2794.             String filename = null;
  2795.            
  2796.             switch(archiveKeystore.getKeystoreTipo()) {
  2797.             case JKS:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS; filename = "Keystore.jks";
  2798.                 break;
  2799.             case PKCS12:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_PKCS12; filename = "Keystore.p12";
  2800.                 break;
  2801.             default:
  2802.                 break;
  2803.             }
  2804.            
  2805.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_TYPE, tipo);
  2806.             p.addProperty(ModICostanti.MODIPA_KEY_ALIAS, archiveKeystore.getKeyAlias());
  2807.             p.addProperty(ModICostanti.MODIPA_KEY_PASSWORD, archiveKeystore.getKeyPassword());
  2808.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_PASSWORD, archiveKeystore.getKeystorePassword());
  2809.             p.addProperty(ModICostanti.MODIPA_KEYSTORE_ARCHIVE, archiveKeystore.getKeystoreArchivio(), filename, filename);
  2810.         }
  2811.     }

  2812.     private static void getOAUTHProperties(FruizioneModIOAuth modi, ProtocolProperties p, FruizioneConf fruizioneConf) {
  2813.         if(fruizioneConf!=null) {
  2814.             // nop
  2815.         }
  2816.         if(modi!=null) {
  2817.             if(modi.getIdentificativo()!=null && StringUtils.isNotEmpty(modi.getIdentificativo())) {
  2818.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, modi.getIdentificativo());
  2819.             }
  2820.             if(modi.getKid()!=null && StringUtils.isNotEmpty(modi.getKid())) {
  2821.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, modi.getKid());
  2822.             }
  2823.             if(modi.getKeystore()!=null) {
  2824.                 if(modi.getKeystore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2825.                    
  2826.                     ModiErogazioniApiHelper.setKeystoreDefaultProperties(p);
  2827.                    
  2828.                 } else {
  2829.    
  2830.                     ModIKeyStoreRidefinito keystoreRidefinito = (ModIKeyStoreRidefinito)modi.getKeystore();
  2831.                     ModiErogazioniApiHelper.setKeystoreRidefinitoProperties(p, keystoreRidefinito);
  2832.                    
  2833.                 }
  2834.             }
  2835.         }
  2836.     }
  2837.    
  2838.     private static void getSOAPProperties(FruizioneModISoap modi, ProtocolProperties p, FruizioneConf fruizioneConf) {

  2839.         if(!fruizioneConf.sicurezzaMessaggioAPIAbilitata) {
  2840.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.IMPOSSIBILE_ABILITARE_SICUREZZA);
  2841.         }
  2842.        
  2843.         // **** richiesta ****
  2844.        
  2845.         FruizioneModISoapRichiestaSicurezzaMessaggio sicurezzaMessaggioRichiesta = modi.getRichiesta().getSicurezzaMessaggio();
  2846.        
  2847.         String algo = null;
  2848.         if(sicurezzaMessaggioRichiesta.getAlgoritmo()!= null) {
  2849.             switch(sicurezzaMessaggioRichiesta.getAlgoritmo()) {
  2850.             case DSA_SHA_256:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_DSA_SHA_256;
  2851.                 break;
  2852.             case ECDSA_SHA_256: algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256;
  2853.                 break;
  2854.             case ECDSA_SHA_384:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_384;
  2855.                 break;
  2856.             case ECDSA_SHA_512:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_512;
  2857.                 break;
  2858.             case RSA_SHA_256:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_256;
  2859.                 break;
  2860.             case RSA_SHA_384:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_384;
  2861.                 break;
  2862.             case RSA_SHA_512:algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_RSA_SHA_512;
  2863.                 break;
  2864.             default:
  2865.                 break;}
  2866.         } else {
  2867.             algo = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_ALG_ECDSA_SHA_256;
  2868.         }
  2869.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_ALG, algo);

  2870.         String canonic = null;
  2871.         if(sicurezzaMessaggioRichiesta.getFormaCanonicaXml()!=null) {
  2872.             switch(sicurezzaMessaggioRichiesta.getFormaCanonicaXml()) {
  2873.             case CANONICAL_XML_10:canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_10;
  2874.                 break;
  2875.             case CANONICAL_XML_11:canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_INCLUSIVE_C14N_11;
  2876.                 break;
  2877.             case EXCLUSIVE_CANONICAL_XML_10: canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10;
  2878.                 break;
  2879.             default:
  2880.                 break;}
  2881.         } else {
  2882.             canonic = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_EXCLUSIVE_C14N_10;
  2883.         }
  2884.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_CANONICALIZATION_ALG, canonic);
  2885.        
  2886.         if(sicurezzaMessaggioRichiesta.getHeaderSoapFirmare()!=null) {
  2887.             String soapHeaders = String.join("\n", sicurezzaMessaggioRichiesta.getHeaderSoapFirmare());
  2888.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP, soapHeaders);
  2889.         }
  2890.        
  2891.         String rif509 = null;
  2892.         if(sicurezzaMessaggioRichiesta.getRiferimentoX509()!= null) {
  2893.             switch(sicurezzaMessaggioRichiesta.getRiferimentoX509()) {
  2894.             case BINARY_SECURITY_TOKEN: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN;
  2895.                 break;
  2896.             case ISSUER_SERIAL_SECURITY_TOKEN_REFERENCE: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_SECURITY_TOKEN_REFERENCE;
  2897.                 break;
  2898.             case SKI_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_SKI;
  2899.                 break;
  2900.             case THUMBPRINT_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_THUMBPRINT;
  2901.                 break;
  2902.             case X509_KEY_IDENTIFIER: rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_KEY_IDENTIFIER_X509;
  2903.                 break;
  2904.             default:
  2905.             }
  2906.         } else {
  2907.             rif509 = ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_VALUE_BINARY_SECURITY_TOKEN;
  2908.         }
  2909.         p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509, rif509);

  2910.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN, sicurezzaMessaggioRichiesta.isIncludiSignatureToken() != null && sicurezzaMessaggioRichiesta.isIncludiSignatureToken().booleanValue() ));
  2911.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN, sicurezzaMessaggioRichiesta.isCertificateChain() != null && sicurezzaMessaggioRichiesta.isCertificateChain().booleanValue()));
  2912.        
  2913.         if(sicurezzaMessaggioRichiesta.getTimeToLive()!=null) {
  2914.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_EXPIRED, sicurezzaMessaggioRichiesta.getTimeToLive());
  2915.         }
  2916.                
  2917.         if(sicurezzaMessaggioRichiesta.getWsaTo()!=null) {
  2918.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, sicurezzaMessaggioRichiesta.getWsaTo());
  2919.         } else {
  2920.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE, "");
  2921.         }

  2922.         // keystore
  2923.        
  2924.         if(sicurezzaMessaggioRichiesta.getKeystore()!=null) {
  2925.            
  2926.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE);
  2927.            
  2928.             if(sicurezzaMessaggioRichiesta.getKeystore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  2929.                
  2930.                 ModiErogazioniApiHelper.setKeystoreDefaultProperties(p);
  2931.                
  2932.             } else {

  2933.                 ModIKeyStoreRidefinito keystoreRidefinito = (ModIKeyStoreRidefinito)sicurezzaMessaggioRichiesta.getKeystore();
  2934.                 ModiErogazioniApiHelper.setKeystoreRidefinitoProperties(p, keystoreRidefinito);
  2935.                
  2936.             }
  2937.         }
  2938.         else {
  2939.            
  2940.             if(sicurezzaMessaggioRichiesta.isKeystoreTokenPolicy()!=null && sicurezzaMessaggioRichiesta.isKeystoreTokenPolicy().booleanValue()) {
  2941.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_TOKEN_POLICY);
  2942.             }
  2943.             else {
  2944.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE, ModICostanti.MODIPA_KEYSTORE_FRUIZIONE_APPLICATIVO);
  2945.             }
  2946.            
  2947.         }
  2948.        
  2949.         // informazione utente

  2950.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteCodiceEnte(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE);
  2951.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteUserid(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER);
  2952.         ModiErogazioniApiHelper.addInformazioniUtente(sicurezzaMessaggioRichiesta.getInformazioniUtenteIndirizzoIp(), p, fruizioneConf, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_MODE, ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER);
  2953.        
  2954.         // informazioni audit
  2955.        
  2956.         List<String> infoAuditRequired = ModiErogazioniApiHelper.getInformazioniAuditRequired(fruizioneConf.schemaAudit);
  2957.        
  2958.         if(sicurezzaMessaggioRichiesta.getAudit()!=null) {
  2959.            
  2960.             if(sicurezzaMessaggioRichiesta.getAudit().getAudience()!=null) {
  2961.                 switch (sicurezzaMessaggioRichiesta.getAudit().getAudience()) {
  2962.                 case SAME:
  2963.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2964.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTE_AUDIT_AUDIENCE_VALUE_SAME);
  2965.                     break;
  2966.                 case DIFFERENT:
  2967.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE,
  2968.                             ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT);
  2969.                     if(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso()==null || StringUtils.isEmpty(sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso())) {
  2970.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Audience di audit non definito");
  2971.                     }
  2972.                     p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT,
  2973.                             sicurezzaMessaggioRichiesta.getAudit().getAudienceAtteso());
  2974.                     break;
  2975.                 default:
  2976.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Modalità di gestione dell'audience di audit sconosciuta: "+sicurezzaMessaggioRichiesta.getAudit().getAudience());
  2977.                 }
  2978.             }
  2979.                        
  2980.             if(sicurezzaMessaggioRichiesta.getAudit().getInformazioni()!=null && !sicurezzaMessaggioRichiesta.getAudit().getInformazioni().isEmpty()) {
  2981.                
  2982.                 List<String> claimsDefiniti = ModiErogazioniApiHelper.getInformazioniAudit(fruizioneConf.schemaAudit);
  2983.                
  2984.                 for (FruizioneModIRichiestaInformazioneUtenteAudit info : sicurezzaMessaggioRichiesta.getAudit().getInformazioni()) {
  2985.                     if(info!=null) {
  2986.                         ModiErogazioniApiHelper.addInformazioniUtente(info, p, fruizioneConf, claimsDefiniti);  
  2987.                         infoAuditRequired.remove(info.getNome());
  2988.                     }
  2989.                 }
  2990.             }
  2991.            
  2992.         }
  2993.        
  2994.         if(!infoAuditRequired.isEmpty()) {
  2995.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'audit definito nella API richiede la definizione delle seguenti informazioni: "+infoAuditRequired);
  2996.         }
  2997.        
  2998.         // oauth
  2999.        
  3000.         if(modi.getRichiesta().getOauth()!=null) {
  3001.             if(modi.getRichiesta().getOauth().getIdentificativo()!=null && StringUtils.isNotEmpty(modi.getRichiesta().getOauth().getIdentificativo())) {
  3002.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO, modi.getRichiesta().getOauth().getIdentificativo());
  3003.             }
  3004.             if(modi.getRichiesta().getOauth().getKid()!=null && StringUtils.isNotEmpty(modi.getRichiesta().getOauth().getKid())) {
  3005.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_OAUTH_KID, modi.getRichiesta().getOauth().getKid());
  3006.             }
  3007.         }
  3008.        
  3009.        
  3010.         // **** risposta ****
  3011.        
  3012.         FruizioneModISoapRispostaSicurezzaMessaggio sicurezzaMessaggioRisposta = modi.getRisposta().getSicurezzaMessaggio();
  3013.        
  3014.         if(sicurezzaMessaggioRisposta.getTruststore().getModalita().equals(StatoDefaultRidefinitoEnum.DEFAULT)) {
  3015.            
  3016.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_DEFAULT);
  3017.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS);
  3018.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, "");
  3019.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, "");
  3020.            
  3021.         } else {

  3022.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);

  3023.             ModITrustStoreRidefinito truststoreRidefinito = (ModITrustStoreRidefinito)sicurezzaMessaggioRisposta.getTruststore();
  3024.            
  3025.             String tipo = null;
  3026.             switch(truststoreRidefinito.getTruststoreTipo()) {
  3027.             case JKS:tipo = ModICostanti.MODIPA_KEYSTORE_TYPE_VALUE_JKS;
  3028.                 break;
  3029.             case PKCS11:
  3030.                 tipo = truststoreRidefinito.getPcks11Tipo();
  3031.                 if(tipo==null) {
  3032.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_PKCS11_NON_INDICATO);
  3033.                 }
  3034.                 break;
  3035.             case PDND:
  3036.                 tipo = truststoreRidefinito.getPdndTipo();
  3037.                 if(tipo==null) {
  3038.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_NON_INDICATO);
  3039.                 }
  3040.                 if(!isModITrustStoreSafe(tipo)) {
  3041.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(TIPO_TRUSTSTORE_PDND_SCONOSCIUTO_PREFIX+tipo);
  3042.                 }
  3043.                 break;              
  3044.             default:
  3045.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(ModiErogazioniApiHelper.TIPO_TRUSTSTORE_SCONOSCIUTO_PREFIX+truststoreRidefinito.getTruststoreTipo());
  3046.             }
  3047.            
  3048.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE, tipo);
  3049.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, truststoreRidefinito.getTruststorePassword());
  3050.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH, truststoreRidefinito.getTruststorePath());
  3051.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS, truststoreRidefinito.getTruststoreCrl());
  3052.             if(truststoreRidefinito.getTruststoreOcspPolicy()!=null) {
  3053.                 p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY, truststoreRidefinito.getTruststoreOcspPolicy());
  3054.             }
  3055.            
  3056.         }

  3057.         if(sicurezzaMessaggioRisposta.getTimeToLive()!=null && sicurezzaMessaggioRisposta.getTimeToLive()>0) {
  3058.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, ModICostanti.MODIPA_PROFILO_RIDEFINISCI);
  3059.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT_SECONDS,  sicurezzaMessaggioRisposta.getTimeToLive());
  3060.         }
  3061.         else {
  3062.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT, ModICostanti.MODIPA_PROFILO_DEFAULT);
  3063.         }

  3064.         p.addProperty(ProtocolPropertiesFactory.newProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE, sicurezzaMessaggioRisposta.isVerificaWsaTo()!=null && sicurezzaMessaggioRisposta.isVerificaWsaTo().booleanValue()));
  3065.         if(sicurezzaMessaggioRisposta.isVerificaWsaTo()!=null && sicurezzaMessaggioRisposta.isVerificaWsaTo() && sicurezzaMessaggioRisposta.getAudienceAtteso()!=null) {
  3066.             p.addProperty(ModICostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE_VALORE, sicurezzaMessaggioRisposta.getAudienceAtteso());
  3067.         }
  3068.     }
  3069.    
  3070.     private static void fillErogazioneModIInfoGenerali(ProtocolProperties p, ErogazioneModIInfoGenerali informazioniGenerali) {
  3071.         if (informazioniGenerali != null) {
  3072.             if (informazioniGenerali.getServiceId() != null)
  3073.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_ID_ESERVICE_ID, informazioniGenerali.getServiceId());
  3074.             if (informazioniGenerali.getSignalHub() != null) {
  3075.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_ID, true);
  3076.                
  3077.                 ErogazioneModISignalHub signalHubConf = informazioniGenerali.getSignalHub();
  3078.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_ALGORITHM_ID, signalHubConf.getAlgoritmo());
  3079.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_OPERATION_ID, signalHubConf.getRisorsa());
  3080.                 if (signalHubConf.getRuolo() != null)
  3081.                     p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_ROLE_ID, signalHubConf.getRuolo());
  3082.                 if (signalHubConf.getApplicativo() != null)
  3083.                     p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_SA_ID, signalHubConf.getApplicativo());
  3084.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_SEED_LIFETIME_ID, signalHubConf.getGiorniRotazione());
  3085.                 p.addProperty(ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_SEED_SIZE_ID, signalHubConf.getDimensioneSeme());
  3086.             }
  3087.         }
  3088.     }
  3089.    
  3090.     private static ErogazioneModIInfoGenerali getErogazioneModIInfoGenerali(Map<String, AbstractProperty<?>> p) throws CoreException {
  3091.         ErogazioneModIInfoGenerali infoGenerali = null;
  3092.        
  3093.         String eServiceId = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_ID_ESERVICE_ID, false);
  3094.                
  3095.         if (eServiceId != null) {
  3096.             infoGenerali = new ErogazioneModIInfoGenerali();
  3097.             infoGenerali.setServiceId(eServiceId);
  3098.            
  3099.             Boolean signalHubEnabled = ProtocolPropertiesHelper.getBooleanProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_ID, false);
  3100.             if (signalHubEnabled != null && signalHubEnabled.booleanValue()) {
  3101.                 String digestAlgorithm = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_ALGORITHM_ID, false);
  3102.                 String operation = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_OPERATION_ID, false);
  3103.                 String role = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_ROLE_ID, false);
  3104.                 String saName = ProtocolPropertiesHelper.getStringProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_SA_ID, false);
  3105.                 Integer seedLifetime = ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_SEED_LIFETIME_ID, false);
  3106.                 Integer seedSize = ProtocolPropertiesHelper.getIntegerProperty(p, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_SEED_SIZE_ID, false);

  3107.                 ErogazioneModISignalHub signalHubConf = new ErogazioneModISignalHub();
  3108.                 signalHubConf.algoritmo(digestAlgorithm)
  3109.                     .applicativo(saName)
  3110.                     .dimensioneSeme(seedSize)
  3111.                     .risorsa(operation)
  3112.                     .ruolo(role)
  3113.                     .giorniRotazione(seedLifetime);
  3114.                 infoGenerali.setSignalHub(signalHubConf);
  3115.             }
  3116.         }
  3117.        
  3118.         return infoGenerali;
  3119.     }

  3120. }