ErogazioniApiHelper.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 static org.openspcoop2.utils.service.beans.utils.BaseHelper.deserializeDefault;
  22. import static org.openspcoop2.utils.service.beans.utils.BaseHelper.evalnull;

  23. import java.util.ArrayList;
  24. import java.util.Arrays;
  25. import java.util.Date;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29. import java.util.Optional;
  30. import java.util.Properties;
  31. import java.util.stream.Collectors;
  32. import java.util.stream.Stream;

  33. import javax.ws.rs.core.UriInfo;

  34. import org.apache.commons.lang.StringEscapeUtils;
  35. import org.apache.commons.lang3.StringUtils;
  36. import org.openspcoop2.core.commons.CoreException;
  37. import org.openspcoop2.core.commons.Filtri;
  38. import org.openspcoop2.core.commons.Liste;
  39. import org.openspcoop2.core.config.AttributeAuthority;
  40. import org.openspcoop2.core.config.AutorizzazioneRuoli;
  41. import org.openspcoop2.core.config.AutorizzazioneScope;
  42. import org.openspcoop2.core.config.Configurazione;
  43. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  44. import org.openspcoop2.core.config.CorrelazioneApplicativaElemento;
  45. import org.openspcoop2.core.config.CorrelazioneApplicativaRispostaElemento;
  46. import org.openspcoop2.core.config.CorsConfigurazione;
  47. import org.openspcoop2.core.config.DumpConfigurazione;
  48. import org.openspcoop2.core.config.DumpConfigurazioneRegola;
  49. import org.openspcoop2.core.config.GestioneToken;
  50. import org.openspcoop2.core.config.GestioneTokenAutenticazione;
  51. import org.openspcoop2.core.config.InvocazioneServizio;
  52. import org.openspcoop2.core.config.PortaApplicativa;
  53. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneToken;
  54. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  55. import org.openspcoop2.core.config.PortaDelegata;
  56. import org.openspcoop2.core.config.PortaDelegataAutorizzazioneToken;
  57. import org.openspcoop2.core.config.PortaDelegataAzione;
  58. import org.openspcoop2.core.config.PortaTracciamento;
  59. import org.openspcoop2.core.config.Proprieta;
  60. import org.openspcoop2.core.config.ResponseCachingConfigurazione;
  61. import org.openspcoop2.core.config.ResponseCachingConfigurazioneHashGenerator;
  62. import org.openspcoop2.core.config.ResponseCachingConfigurazioneRegola;
  63. import org.openspcoop2.core.config.Ruolo;
  64. import org.openspcoop2.core.config.ServizioApplicativo;
  65. import org.openspcoop2.core.config.TracciamentoConfigurazione;
  66. import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
  67. import org.openspcoop2.core.config.constants.CorrelazioneApplicativaGestioneIdentificazioneFallita;
  68. import org.openspcoop2.core.config.constants.CorrelazioneApplicativaRichiestaIdentificazione;
  69. import org.openspcoop2.core.config.constants.CorrelazioneApplicativaRispostaIdentificazione;
  70. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  71. import org.openspcoop2.core.config.constants.PortaDelegataSoggettiErogatori;
  72. import org.openspcoop2.core.config.constants.RuoloContesto;
  73. import org.openspcoop2.core.config.constants.RuoloTipoMatch;
  74. import org.openspcoop2.core.config.constants.ScopeTipoMatch;
  75. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  76. import org.openspcoop2.core.config.constants.StatoFunzionalitaCacheDigestQueryParameter;
  77. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  78. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  79. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  80. import org.openspcoop2.core.config.constants.TipoGestioneCORS;
  81. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  82. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  83. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  84. import org.openspcoop2.core.config.rs.server.api.impl.Environment;
  85. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  86. import org.openspcoop2.core.config.rs.server.api.impl.HttpRequestWrapper;
  87. import org.openspcoop2.core.config.rs.server.api.impl.IdServizio;
  88. import org.openspcoop2.core.config.rs.server.api.impl.StatoDescrizione;
  89. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.configurazione.ErogazioniConfEnv;
  90. import org.openspcoop2.core.config.rs.server.api.impl.fruizioni.configurazione.FruizioniConfEnv;
  91. import org.openspcoop2.core.config.rs.server.config.LoggerProperties;
  92. import org.openspcoop2.core.config.rs.server.model.*;
  93. import org.openspcoop2.core.constants.CostantiConnettori;
  94. import org.openspcoop2.core.constants.CostantiDB;
  95. import org.openspcoop2.core.constants.TipiConnettore;
  96. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  97. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyFiltro;
  98. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyRaggruppamento;
  99. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  100. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  101. import org.openspcoop2.core.controllo_traffico.constants.TipoFiltroApplicativo;
  102. import org.openspcoop2.core.controllo_traffico.constants.TipoPeriodoRealtime;
  103. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsa;
  104. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsaPolicyAttiva;
  105. import org.openspcoop2.core.controllo_traffico.utils.PolicyUtilities;
  106. import org.openspcoop2.core.id.IDAccordo;
  107. import org.openspcoop2.core.id.IDFruizione;
  108. import org.openspcoop2.core.id.IDPortaApplicativa;
  109. import org.openspcoop2.core.id.IDPortaDelegata;
  110. import org.openspcoop2.core.id.IDRuolo;
  111. import org.openspcoop2.core.id.IDServizio;
  112. import org.openspcoop2.core.id.IDSoggetto;
  113. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  114. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  115. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  116. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  117. import org.openspcoop2.core.registry.ConfigurazioneServizio;
  118. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  119. import org.openspcoop2.core.registry.Connettore;
  120. import org.openspcoop2.core.registry.Documento;
  121. import org.openspcoop2.core.registry.Fruitore;
  122. import org.openspcoop2.core.registry.IdSoggetto;
  123. import org.openspcoop2.core.registry.Property;
  124. import org.openspcoop2.core.registry.Soggetto;
  125. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  126. import org.openspcoop2.core.registry.beans.GruppoSintetico;
  127. import org.openspcoop2.core.registry.beans.PortTypeSintetico;
  128. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  129. import org.openspcoop2.core.registry.constants.PddTipologia;
  130. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  131. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  132. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  133. import org.openspcoop2.core.registry.constants.ServiceBinding;
  134. import org.openspcoop2.core.registry.constants.TipiDocumentoLivelloServizio;
  135. import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
  136. import org.openspcoop2.core.registry.constants.TipiDocumentoSicurezza;
  137. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  138. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  139. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  140. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  141. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  142. import org.openspcoop2.core.registry.driver.db.IDAccordoDB;
  143. import org.openspcoop2.core.registry.driver.db.IDSoggettoDB;
  144. import org.openspcoop2.core.transazioni.utils.TipoCredenzialeMittente;
  145. import org.openspcoop2.pdd.config.UrlInvocazioneAPI;
  146. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneApiKey;
  147. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneBasic;
  148. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazionePrincipal;
  149. import org.openspcoop2.pdd.core.autorizzazione.CostantiAutorizzazione;
  150. import org.openspcoop2.pdd.core.autorizzazione.canali.CanaliUtils;
  151. import org.openspcoop2.protocol.basic.Utilities;
  152. import org.openspcoop2.protocol.engine.constants.Costanti;
  153. import org.openspcoop2.protocol.information_missing.constants.StatoType;
  154. import org.openspcoop2.protocol.sdk.ProtocolException;
  155. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  156. import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
  157. import org.openspcoop2.protocol.sdk.properties.AbstractProperty;
  158. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  159. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  160. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  161. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  162. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  163. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  164. import org.openspcoop2.protocol.utils.EsitiConfigUtils;
  165. import org.openspcoop2.protocol.utils.EsitiProperties;
  166. import org.openspcoop2.utils.BooleanNullable;
  167. import org.openspcoop2.utils.LoggerWrapperFactory;
  168. import org.openspcoop2.utils.UtilsException;
  169. import org.openspcoop2.utils.regexp.RegExpNotFoundException;
  170. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  171. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  172. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  173. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  174. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  175. import org.openspcoop2.web.ctrlstat.core.AutorizzazioneUtilities;
  176. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  177. import org.openspcoop2.web.ctrlstat.core.SerialiableFormFile;
  178. import org.openspcoop2.web.ctrlstat.costanti.ConnettoreServletType;
  179. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  180. import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
  181. import org.openspcoop2.web.ctrlstat.plugins.servlet.ServletExtendedConnettoreUtils;
  182. import org.openspcoop2.web.ctrlstat.servlet.ConsoleHelper;
  183. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  184. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  185. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
  186. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaUtilities;
  187. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  188. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  189. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  190. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneHelper;
  191. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  192. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  193. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeHelper;
  194. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeUtilities;
  195. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  196. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCostanti;
  197. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateUtilities;
  198. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  199. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCore;
  200. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  201. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  202. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  203. import org.openspcoop2.web.lib.mvc.ServletUtils;
  204. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  205. import org.slf4j.Logger;


  206. /**
  207.  * ErogazioniApiHelper
  208.  *
  209.  * @author $Author$
  210.  * @version $Rev$, $Date$
  211.  */
  212. public class ErogazioniApiHelper {
  213.    
  214.     private ErogazioniApiHelper() {}
  215.        
  216.    
  217.     public static void validateProperties(ErogazioniEnv env, ProtocolProperties protocolProperties, AccordoServizioParteSpecifica asps,
  218.             ConsoleOperationType operationType)
  219.             throws Exception {
  220.         if(protocolProperties!=null) {
  221.             try{

  222.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(env, asps);

  223.                 env.apsHelper.validaProtocolProperties(consoleConf, ConsoleOperationType.ADD, protocolProperties);
  224.                
  225.                 IDServizio oldIdAps = env.idServizioFactory.getIDServizioFromValues(asps.getTipo(), asps.getNome(), new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()), asps.getVersione());
  226.                 oldIdAps.setUriAccordoServizioParteComune(asps.getAccordoServizioParteComune());
  227.                 oldIdAps.setPortType(asps.getPortType());
  228.                
  229.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  230.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  231.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  232.                 consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(consoleConf, operationType, env.apsHelper, protocolProperties,
  233.                         registryReader, configRegistryReader, oldIdAps);
  234.                
  235.                 consoleDynamicConfiguration.validateDynamicConfigAccordoServizioParteSpecifica(consoleConf, operationType, env.apsHelper, protocolProperties,
  236.                         registryReader, configRegistryReader, oldIdAps);
  237.                
  238.             }catch(ProtocolException e){
  239.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e);
  240.             }
  241.         }
  242.     }

  243.     public static void validateProperties(ErogazioniEnv env, ProtocolProperties protocolProperties, IDFruizione id,
  244.             ConsoleOperationType operationType)
  245.             throws Exception {
  246.         if(protocolProperties!=null) {
  247.             try{

  248.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(env, id);

  249.                 env.apsHelper.validaProtocolProperties(consoleConf, ConsoleOperationType.ADD, protocolProperties);
  250.                
  251.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  252.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  253.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  254.                 consoleDynamicConfiguration.updateDynamicConfigFruizioneAccordoServizioParteSpecifica(consoleConf, operationType, env.apsHelper, protocolProperties,
  255.                         registryReader, configRegistryReader, id);
  256.                
  257.                 consoleDynamicConfiguration.validateDynamicConfigFruizioneAccordoServizioParteSpecifica(consoleConf, operationType, env.apsHelper, protocolProperties,
  258.                         registryReader, configRegistryReader, id);
  259.                
  260.             }catch(ProtocolException e){
  261.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e);
  262.             }
  263.         }
  264.     }


  265.     public static ConsoleConfiguration getConsoleConfiguration(ErogazioniEnv env, AccordoServizioParteSpecifica asps) throws Exception {
  266.         IDServizio oldIdAps = env.idServizioFactory.getIDServizioFromValues(asps.getTipo(), asps.getNome(), new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()), asps.getVersione());
  267.         oldIdAps.setUriAccordoServizioParteComune(asps.getAccordoServizioParteComune());
  268.         oldIdAps.setPortType(asps.getPortType());

  269.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  270.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  271.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  272.         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM, Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE);
  273.        
  274.         return consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteSpecifica(ConsoleOperationType.ADD, env.apsHelper,
  275.                 registryReader, configRegistryReader, oldIdAps);

  276.     }
  277.    
  278.     public static void updateConsoleConfiguration(ErogazioniEnv env, AccordoServizioParteSpecifica asps,
  279.             ConsoleConfiguration consoleConf, ProtocolProperties prop) throws Exception {
  280.         IDServizio oldIdAps = env.idServizioFactory.getIDServizioFromValues(asps.getTipo(), asps.getNome(), new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()), asps.getVersione());
  281.         oldIdAps.setUriAccordoServizioParteComune(asps.getAccordoServizioParteComune());
  282.         oldIdAps.setPortType(asps.getPortType());

  283.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  284.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  285.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  286.         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM, Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE);
  287.        
  288.         consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(consoleConf, ConsoleOperationType.CHANGE, env.apsHelper, prop,
  289.                 registryReader, configRegistryReader, oldIdAps);

  290.     }

  291.     public static ConsoleConfiguration getConsoleConfiguration(ErogazioniEnv env, IDFruizione id) throws Exception {
  292.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  293.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  294.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  295.         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM, Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE);

  296.         return consoleDynamicConfiguration.getDynamicConfigFruizioneAccordoServizioParteSpecifica(ConsoleOperationType.ADD, env.apsHelper, registryReader, configRegistryReader, id);
  297.     }
  298.    
  299.     public static void updateConsoleConfiguration(ErogazioniEnv env, IDFruizione id,
  300.             ConsoleConfiguration consoleConf, ProtocolProperties prop) throws Exception {
  301.        
  302.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();

  303.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  304.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  305.         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM, Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE);
  306.        
  307.         consoleDynamicConfiguration.updateDynamicConfigFruizioneAccordoServizioParteSpecifica(consoleConf, ConsoleOperationType.CHANGE, env.apsHelper, prop,
  308.                 registryReader, configRegistryReader, id);

  309.     }


  310.     public static ProtocolProperties getProtocolProperties(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws Exception {
  311.         ConsoleConfiguration consoleConf = getConsoleConfiguration(env, asps);

  312.         ProtocolProperties prop = env.apsHelper.estraiProtocolPropertiesDaRequest(consoleConf, ConsoleOperationType.CHANGE);
  313.         ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(prop, asps.getProtocolPropertyList(), ConsoleOperationType.CHANGE);
  314.        
  315.         // update della configurazione
  316.         // non sembra servire
  317.         //updateConsoleConfiguration(env, asps, consoleConf, prop);
  318.        
  319.         return prop;
  320.     }
  321.     public static ProtocolProperties getProtocolProperties(IDFruizione id, Fruitore f, ErogazioniEnv env) throws Exception {
  322.         ConsoleConfiguration consoleConf = getConsoleConfiguration(env, id);

  323.         ProtocolProperties prop = env.apsHelper.estraiProtocolPropertiesDaRequest(consoleConf, ConsoleOperationType.CHANGE);
  324.         ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(prop, f.getProtocolPropertyList(), ConsoleOperationType.CHANGE);
  325.        
  326.         // update della configurazione
  327.         // non sembra servire
  328.         //updateConsoleConfiguration(env, id, consoleConf, prop);
  329.        
  330.         return prop;
  331.     }
  332.     public static Map<String, AbstractProperty<?>> getProtocolPropertiesMap(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws Exception {

  333.         ProtocolProperties prop = getProtocolProperties(asps, env);
  334.         Map<String, AbstractProperty<?>> p = new HashMap<>();

  335.         for(int i =0; i < prop.sizeProperties(); i++) {
  336.             p.put(prop.getIdProperty(i), prop.getProperty(i));
  337.         }
  338.        
  339.         return p;
  340.     }
  341.    
  342.     public static Map<String, AbstractProperty<?>> getProtocolPropertiesMap(IDFruizione id, Fruitore f, ErogazioniEnv env) throws Exception {

  343.         ProtocolProperties prop = getProtocolProperties(id, f, env);
  344.         Map<String, AbstractProperty<?>> p = new HashMap<>();

  345.         for(int i =0; i < prop.sizeProperties(); i++) {
  346.             p.put(prop.getIdProperty(i), prop.getProperty(i));
  347.         }
  348.        
  349.         return p;
  350.     }
  351.    
  352.     public static ProtocolProperties getProtocolProperties(Erogazione body, ProfiloEnum profilo, AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps, ErogazioniEnv env, boolean required) throws Exception {


  353.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  354.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  355.         }

  356.         switch(profilo) {
  357.         case APIGATEWAY:
  358.             return null;// trasparente
  359.         case EDELIVERY:
  360.             return EDeliveryErogazioniApiHelper.getProtocolProperties(body);
  361.         case FATTURAPA:
  362.             return FatturaPAErogazioniApiHelper.getProtocolProperties(body);
  363.         case MODI:
  364.         case MODIPA:
  365.             return ModiErogazioniApiHelper.getProtocolProperties(body, aspc, asps, env, required);
  366.         case SPCOOP:
  367.             return SPCoopErogazioniApiHelper.getProtocolProperties(body);
  368.         }
  369.         return null;
  370.     }

  371.     public static ProtocolProperties getProtocolProperties(Fruizione body, ProfiloEnum profilo, AccordoServizioParteSpecifica asps, ErogazioniEnv env, boolean required) throws Exception {


  372.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  373.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  374.         }

  375.         switch(profilo) {
  376.         case APIGATEWAY:
  377.             return null;// trasparente
  378.         case EDELIVERY:
  379.             return EDeliveryErogazioniApiHelper.getProtocolProperties(body);
  380.         case FATTURAPA:
  381.             return FatturaPAErogazioniApiHelper.getProtocolProperties(body);
  382.         case MODI:
  383.         case MODIPA:
  384.             return ModiErogazioniApiHelper.getProtocolProperties(body, asps, env, required);
  385.         case SPCOOP:
  386.             return SPCoopErogazioniApiHelper.getProtocolProperties(body);
  387.         }
  388.         return null;
  389.     }


  390.     @SuppressWarnings("unchecked")
  391.     public static final <T> T deserializeModalitaConfGruppo(ModalitaConfigurazioneGruppoEnum discr, Object body) throws UtilsException, InstantiationException, IllegalAccessException {
  392.        
  393.         switch(discr) {
  394.         case EREDITA: {
  395.             GruppoEreditaConfigurazione conf = deserializeDefault(body, GruppoEreditaConfigurazione.class);
  396.             if (StringUtils.isEmpty(conf.getNome())) {
  397.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(GruppoEreditaConfigurazione.class.getName()+": Indicare il campo obbligatorio 'nome'");
  398.             }
  399.             return (T) conf;
  400.         }
  401.         case NUOVA: {
  402.             GruppoNuovaConfigurazione conf = deserializeDefault(body, GruppoNuovaConfigurazione.class);
  403.             ErogazioniCheckNotNull.checkAutenticazione(conf);
  404.            
  405.             return (T) conf;
  406.         }
  407.         default:
  408.             return null;
  409.         }
  410.     }

  411.    
  412.     public static final void fillAps(
  413.             AccordoServizioParteSpecifica specifico,
  414.             APIImpl impl,
  415.             ErogazioniEnv env
  416.         ) throws ProtocolException {    
  417.        
  418.         specifico.setNome(impl.getApiNome());
  419.        
  420.         if(impl.getTipoServizio()!=null && StringUtils.isNotEmpty(impl.getTipoServizio())) {
  421.             List<String> l = env.protocolFactoryMgr.getProtocolFactoryByName(env.tipo_protocollo).createProtocolConfiguration().getTipiServizi(null);
  422.             if(l!=null && !l.contains(impl.getTipoServizio())) {
  423.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo servizio indicato '"+impl.getTipoServizio()+"' non supportato dal profilo '"+env.profilo+"'");
  424.             }
  425.             specifico.setTipo(impl.getTipoServizio());
  426.         }
  427.        
  428.         specifico.setVersione(impl.getApiVersione());
  429.         specifico.setPortType(impl.getApiSoapServizio());  
  430.     }
  431.    
  432.     public static final AccordoServizioParteSpecifica apiImplToAps(APIImpl impl, final Soggetto soggErogatore, AccordoServizioParteComuneSintetico as, ErogazioniEnv env)
  433.             throws DriverRegistroServiziException, ProtocolException {
  434.         final AccordoServizioParteSpecifica ret = new AccordoServizioParteSpecifica();
  435.                
  436.         fillAps(ret, impl, env);
  437.        
  438.         // Questo per seguire la specifica della console, che durante la creazione di un servizio soap
  439.         // vuole che il nome del'asps sia quello del servizio\port_type
  440.         if (as.getServiceBinding() == ServiceBinding.SOAP) {
  441.             ret.setNome(ret.getPortType());
  442.         }
  443.        
  444.         if(env.apsCore.isSupportatoVersionamentoAccordiServizioParteSpecifica(env.tipo_protocollo))
  445.             ret.setVersione(as.getVersione());
  446.        
  447.         if(impl instanceof Erogazione) {
  448.             Erogazione erogazione = (Erogazione) impl;
  449.             if(erogazione.getErogazioneNome()!=null && !"".equals(erogazione.getErogazioneNome())) {
  450.                 ret.setNome(erogazione.getErogazioneNome());
  451.             }
  452.             if(env.apsCore.isSupportatoVersionamentoAccordiServizioParteSpecifica(env.tipo_protocollo) &&
  453.                 erogazione.getErogazioneVersione()!=null && erogazione.getErogazioneVersione()>0) {
  454.                 ret.setVersione(erogazione.getErogazioneVersione());
  455.             }
  456.             ret.setDescrizione(erogazione.getDescrizione());
  457.         }
  458.         else if(impl instanceof Fruizione) {
  459.             Fruizione fruizione = (Fruizione) impl;
  460.             if(fruizione.getFruizioneNome()!=null && !"".equals(fruizione.getFruizioneNome())) {
  461.                 ret.setNome(fruizione.getFruizioneNome());
  462.             }
  463.             if(env.apsCore.isSupportatoVersionamentoAccordiServizioParteSpecifica(env.tipo_protocollo) &&
  464.                 fruizione.getFruizioneVersione()!=null && fruizione.getFruizioneVersione()>0) {
  465.                 ret.setVersione(fruizione.getFruizioneVersione());
  466.             }
  467.             // descrizione deve essere impostata sul fruitore
  468.         }

  469.         ret.setIdSoggetto(soggErogatore.getId());
  470.         ret.setTipoSoggettoErogatore(soggErogatore.getTipo());
  471.         ret.setNomeSoggettoErogatore(soggErogatore.getNome());

  472.         ret.setVersioneProtocollo(soggErogatore.getVersioneProtocollo());
  473.        
  474.         ret.setByteWsdlImplementativoErogatore(null);
  475.         ret.setByteWsdlImplementativoFruitore(null);
  476.        
  477.         ret.setIdAccordo(as.getId());  
  478.         ret.setAccordoServizioParteComune(env.idAccordoFactory.getUriFromAccordo(as));
  479.         ret.setTipologiaServizio(TipologiaServizio.NORMALE); // dal debug servcorr è "no"
  480.         ret.setSuperUser(env.userLogin);
  481.         ret.setPrivato(false);                              // Come da debug.
  482.         ret.setStatoPackage(StatoType.FINALE.getValue());
  483.         ret.setConfigurazioneServizio(new ConfigurazioneServizio());
  484.                  
  485.         if (StringUtils.isEmpty(ret.getTipo())) {
  486.             String tipoServizio = env.protocolFactoryMgr.getProtocolFactoryByName(env.tipo_protocollo).createProtocolConfiguration().getTipoServizioDefault(Utilities.convert(as.getServiceBinding()));
  487.             ret.setTipo( tipoServizio );
  488.         }
  489.                
  490.         return ret;
  491.     }
  492.    
  493.    
  494.     public static final void serviziUpdateCheckData(AccordoServizioParteComuneSintetico as, AccordoServizioParteSpecifica asps, boolean isErogazione, ErogazioniEnv env) throws Exception {
  495.        
  496.          // Determino i soggetti compatibili
  497.         ConsoleSearch searchSoggetti = new ConsoleSearch(true);
  498.         searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_PROTOCOLLO, env.tipo_protocollo);
  499.         String[] soggettiCompatibili = env.soggettiCore.soggettiRegistroList(null, searchSoggetti).stream()
  500.                 .map( s -> s.getId().toString())
  501.                 .toArray(String[]::new);
  502.        
  503.         // Determino la lista Api
  504.         String[] accordiList = AccordiServizioParteSpecificaUtilities.getListaIdAPI(
  505.                 env.tipo_protocollo,
  506.                 env.userLogin,
  507.                 env.apsCore,
  508.                 env.apsHelper
  509.             ).stream()
  510.             .map( a -> a.getId().toString() )
  511.             .toArray(String[]::new);
  512.        

  513.         // Determino l'erogatore
  514.         IdSoggetto erogatore = new IdSoggetto( new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()));
  515.         erogatore.setId(asps.getIdSoggetto());
  516.        
  517.         org.openspcoop2.core.registry.Connettore connRegistro = asps.getConfigurazioneServizio().getConnettore();
  518.        
  519.         final String endpointtype = connRegistro.getTipo();
  520.         final String endpoint_url = connRegistro.getProperties().get(CostantiDB.CONNETTORE_HTTP_LOCATION);
  521.        
  522.         // Recupero i Servizi Esposti dalla API
  523.         final String[] ptArray =  AccordiServizioParteSpecificaUtilities.getListaPortTypes(as, env.apsHelper)
  524.                 .stream()
  525.                 .map( p -> p.getNome() )
  526.                 .toArray(String[]::new);
  527.        
  528.         final boolean accordoPrivato = as.getPrivato()!=null && as.getPrivato();

  529.         final ConnettoreHttp connRest = new ConnettoreHTTPApiHelper().buildConnettore(connRegistro.getProperties(), connRegistro.getTipo());
  530.         final ConnettoreConfigurazioneApiKey httpApiKey = connRest.getAutenticazioneApikey();
  531.         boolean apiKey = (httpApiKey!=null && httpApiKey.getApiKey()!=null && StringUtils.isNotEmpty(httpApiKey.getApiKey()));
  532.         final ConnettoreConfigurazioneHttps httpsConf    = connRest.getAutenticazioneHttps();

  533.         final ConnettoreConfigurazioneHttpBasic httpConf     = connRest.getAutenticazioneHttp();
  534.         // Questa è la cosa diversa per i fruitori, Li invece abbiamo le credenziali direttamente nel connettore.
  535.         final ConnettoreConfigurazioneHttpsClient httpsClient = httpsConf!=null ? evalnull( httpsConf::getClient ) : null;
  536.         final ConnettoreConfigurazioneHttpsServer httpsServer = httpsConf!=null ? evalnull( httpsConf::getServer ) : null;
  537.         final ConnettoreConfigurazioneProxy       proxy       = connRest.getProxy();
  538.         final ConnettoreConfigurazioneTimeout     timeoutConf = connRest.getTempiRisposta();
  539.         final String tokenPolicy = connRest.getTokenPolicy();
  540.         final boolean autenticazioneToken = tokenPolicy!=null;
  541.        
  542.        
  543.         final boolean httpsstato = httpsClient != null;
  544.         final boolean http_stato = connRest.getAutenticazioneHttp() != null;
  545.         final boolean proxy_enabled = connRest.getProxy() != null;
  546.         final boolean tempiRisposta_enabled = connRest.getTempiRisposta() != null;
  547.        
  548.         String httpskeystore = null;
  549.         if ( httpsClient != null ) {
  550.             if ( httpsClient.getKeystorePath() != null || httpsClient.getKeystoreTipo() != null ) {
  551.                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_RIDEFINISCI;  
  552.             }
  553.             else
  554.                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  555.         }
  556.        

  557.         final BinaryParameter xamlPolicy = new BinaryParameter();
  558.        
  559.         String erogazioneAutenticazione = null;
  560.         boolean erogazioneAutenticazioneOpzionale = true;
  561.         TipoAutenticazionePrincipal erogazioneAutenticazionePrincipal = null;
  562.         List<String> erogazioneAutenticazioneParametroList = null;
  563.         String erogazioneAutorizzazione = null;
  564.         boolean erogazioneAutorizzazioneAutenticati = false;
  565.         boolean erogazioneAutorizzazioneRuoli = false;
  566.         String erogazioneAutorizzazioneRuoliTipologia = null;
  567.         String erogazioneAutorizzazioneRuoliMatch = null;

  568.         String fruizioneAutenticazione = null;
  569.         boolean fruizioneAutenticazioneOpzionale = true;
  570.         TipoAutenticazionePrincipal fruizioneAutenticazionePrincipal = null;
  571.         List<String> fruizioneAutenticazioneParametroList = null;
  572.         String fruizioneAutorizzazione = null;
  573.         boolean fruizioneAutorizzazioneAutenticati = false;
  574.         boolean fruizioneAutorizzazioneRuoli = false;
  575.         String fruizioneAutorizzazioneRuoliTipologia = null;
  576.         String fruizioneAutorizzazioneRuoliMatch = null;
  577.        
  578.         boolean gestioneCanaliEnabled = env.gestioneCanali;
  579.         String canale = null;      
  580.        
  581.         if ( isErogazione ) {
  582.            
  583.             ServletUtils.setObjectIntoSession(env.requestWrapper, env.requestWrapper.getSession(),
  584.                     AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE,
  585.                     AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  586.            
  587.             final IDServizio idServizio = asps.getOldIDServizioForUpdate();
  588.             final IDPortaApplicativa idPA = env.paCore.getIDPortaApplicativaAssociataDefault(idServizio);
  589.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPA);
  590.                        
  591.             erogazioneAutenticazione = pa.getAutenticazione();
  592.             erogazioneAutenticazioneOpzionale = Helper.statoFunzionalitaConfToBool(pa.getAutenticazioneOpzionale());
  593.             erogazioneAutenticazionePrincipal = env.paCore.getTipoAutenticazionePrincipal(pa.getProprietaAutenticazioneList());
  594.             erogazioneAutenticazioneParametroList = env.paCore.getParametroAutenticazione(erogazioneAutenticazione, pa.getProprietaAutenticazioneList());
  595.            
  596.             erogazioneAutorizzazione = pa.getAutorizzazione();
  597.             erogazioneAutorizzazioneAutenticati = TipoAutorizzazione.isAuthenticationRequired(pa.getAutorizzazione());
  598.             erogazioneAutorizzazioneRuoli = TipoAutorizzazione.isRolesRequired(pa.getAutorizzazione());
  599.             erogazioneAutorizzazioneRuoliTipologia =  AutorizzazioneUtilities.convertToRuoloTipologia(pa.getAutorizzazione()).toString();
  600.             erogazioneAutorizzazioneRuoliMatch = evalnull( () -> pa.getRuoli().getMatch().toString() );
  601.            
  602.             if (pa.getXacmlPolicy() != null) {                          
  603.                 xamlPolicy.setValue(pa.getXacmlPolicy().getBytes());
  604.                 xamlPolicy.setName(CostantiControlStation.PARAMETRO_DOCUMENTO_SICUREZZA_XACML_POLICY);
  605.              }
  606.            
  607.             canale = pa.getCanale();
  608.         } else {
  609.            
  610.             ServletUtils.setObjectIntoSession(env.requestWrapper, env.requestWrapper.getSession(),
  611.                     AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE,
  612.                     AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  613.            
  614.             final IDServizio idServizio = asps.getOldIDServizioForUpdate();
  615.             final IDPortaDelegata idPD = env.pdCore.getIDPortaDelegataAssociataDefault(idServizio, env.idSoggetto.toIDSoggetto());
  616.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPD);
  617.                    
  618.             fruizioneAutenticazione = pd.getAutenticazione();
  619.             fruizioneAutenticazioneOpzionale = Helper.statoFunzionalitaConfToBool(pd.getAutenticazioneOpzionale());
  620.             fruizioneAutenticazionePrincipal = env.pdCore.getTipoAutenticazionePrincipal(pd.getProprietaAutenticazioneList());
  621.             fruizioneAutenticazioneParametroList = env.pdCore.getParametroAutenticazione(fruizioneAutenticazione, pd.getProprietaAutenticazioneList());
  622.            
  623.             fruizioneAutorizzazione = pd.getAutorizzazione();
  624.             fruizioneAutorizzazioneAutenticati = TipoAutorizzazione.isAuthenticationRequired(pd.getAutorizzazione());
  625.             fruizioneAutorizzazioneRuoli =  TipoAutorizzazione.isRolesRequired(pd.getAutorizzazione());
  626.             fruizioneAutorizzazioneRuoliTipologia =  AutorizzazioneUtilities.convertToRuoloTipologia(pd.getAutorizzazione()).toString();
  627.             fruizioneAutorizzazioneRuoliMatch = evalnull( () -> pd.getRuoli().getMatch().toString() );
  628.            
  629.             if (pd.getXacmlPolicy() != null) {                          
  630.                 xamlPolicy.setValue(pd.getXacmlPolicy().getBytes());
  631.                 xamlPolicy.setName(CostantiControlStation.PARAMETRO_DOCUMENTO_SICUREZZA_XACML_POLICY);
  632.             }
  633.            
  634.             canale = pd.getCanale();
  635.         }
  636.        
  637.         String canaleStato = null;
  638.         if(canale == null) {
  639.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
  640.         } else {
  641.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
  642.         }
  643.        
  644.        
  645.         final Properties parametersPOST = null;
  646.         org.openspcoop2.core.registry.Connettore conTmp = null;
  647.         List<ExtendedConnettore> listExtendedConnettore = ServletExtendedConnettoreUtils.getExtendedConnettore(conTmp, ConnettoreServletType.ACCORDO_SERVIZIO_PARTE_SPECIFICA_ADD, env.apsHelper,
  648.                             parametersPOST, false, endpointtype); // uso endpointtype per capire se è la prima volta che entro
  649.                
  650.        
  651.         IDServizio oldId = asps.getOldIDServizioForUpdate();
  652.                
  653.         if (! env.apsHelper.serviziCheckData(                  
  654.                 TipoOperazione.CHANGE,
  655.                 soggettiCompatibili,        
  656.                 accordiList,                
  657.                 oldId.getNome(),        //asps.getNome(),               // oldnome
  658.                 oldId.getTipo(),        //asps.getTipo(),               // oldtipo
  659.                 oldId.getVersione(),    //asps.getVersione(),           // oldversione
  660.                 asps.getNome(),
  661.                 asps.getTipo(),
  662.                 erogatore.getId().toString(),   // idSoggErogatore
  663.                 erogatore.getNome(),
  664.                 erogatore.getTipo(),
  665.                 as.getId().toString(),
  666.                 env.apcCore.toMessageServiceBinding(as.getServiceBinding()),
  667.                 "no",  //servcorr,
  668.                 endpointtype, // endpointtype determinarlo dal connettore,
  669.                 endpoint_url,
  670.                 null,   // nome JMS
  671.                 null,   // tipo JMS,
  672.                 httpConf!=null ? evalnull( httpConf::getUsername ) : null,  
  673.                 httpConf!=null ? evalnull( httpConf::getUsername ) : null,
  674.                 null,   // initcont JMS,
  675.                 null,   // urlpgk JMS,
  676.                 null,   // provurl JMS
  677.                 null,   // connfact JMS
  678.                 null,   // sendas JMS,
  679.                 new BinaryParameter(),      //  wsdlimpler
  680.                 new BinaryParameter(),      //  wsdlimplfru
  681.                 asps.getId().toString(),    
  682.                 asps.getVersioneProtocollo(),   //  Il profilo è la versione protocollo in caso spcoop, è quello del soggetto erogatore.
  683.                 asps.getPortType(),
  684.                 ptArray,
  685.                 accordoPrivato,
  686.                 false,  // this.privato,
  687.                 endpoint_url,   // httpsurl,
  688.                 evalnull( () ->  httpsConf.getTipologia().toString() ),             // I valori corrispondono con con org.openspcoop2.utils.transport.http.SSLConstants
  689.                 BaseHelper.evalorElse( () -> httpsConf.isHostnameVerifier().booleanValue(), false ),                // this.httpshostverify,
  690.                 (httpsConf!=null ? !httpsConf.isTrustAllServerCerts() : ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS), // httpsTrustVerifyCert
  691.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePath ) : null,              // this.httpspath
  692.                 evalnull( () -> ConnettoreHTTPApiHelper.getTruststoreType(httpsServer) ),       // this.httpstipo,
  693.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePassword ) : null,          // this.httpspwd,
  694.                 httpsServer!=null ? evalnull( httpsServer::getAlgoritmo ) : null,                   // this.httpsalgoritmo
  695.                 httpsstato, //
  696.                 httpskeystore,  
  697.                 "", //  this.httpspwdprivatekeytrust
  698.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePath ) : null,                    // httpspathkey
  699.                 evalnull( () -> ConnettoreHTTPApiHelper.getKeystoreType(httpsClient) ),         // httpstipokey, coincide con ConnettoriCostanti.TIPOLOGIE_KEYSTORE
  700.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePassword ) : null,            // httpspwdkey
  701.                 httpsClient!=null ? evalnull( httpsClient::getKeyPassword ) : null,                 // httpspwdprivatekey
  702.                 httpsClient!=null ? evalnull( httpsClient::getAlgoritmo ) : null,                   // httpsalgoritmokey
  703.                 httpsClient!=null ? evalnull( httpsClient::getKeyAlias ) : null,                    // httpsKeyAlias
  704.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreCrl ) : null,                   // httpsTrustStoreCRLs
  705.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreOcspPolicy) : null,             // httpsTrustStoreOCSPPolicy
  706.                 httpsClient!=null ? evalnull( httpsClient::getKeystoreByokPolicy) : null,               // httpsKeyStoreBYOKPolicy
  707.                 null,                               // tipoconn Da debug = null.    
  708.                 as.getVersione().toString(),        // Versione aspc
  709.                 false,                              // validazioneDocumenti Da debug = false
  710.                 null,                               // Da Codice console
  711.                 ServletUtils.boolToCheckBoxStatus(http_stato),  // "yes" se utilizziamo http.
  712.                 ServletUtils.boolToCheckBoxStatus(proxy_enabled),          
  713.                 proxy!=null ? evalnull( proxy::getHostname ) : null,
  714.                 evalnull( () -> proxy.getPorta().toString() ),
  715.                 proxy!=null ? evalnull( proxy::getUsername ) : null,
  716.                 proxy!=null ? evalnull( proxy::getPassword ) : null,                
  717.                 ServletUtils.boolToCheckBoxStatus(tempiRisposta_enabled),
  718.                 evalnull( () -> timeoutConf.getConnectionTimeout().toString()),     // this.tempiRisposta_connectionTimeout,
  719.                 evalnull( () -> timeoutConf.getConnectionReadTimeout().toString()),  // this.tempiRisposta_readTimeout,
  720.                 evalnull( () -> timeoutConf.getTempoMedioRisposta().toString()),        // this.tempiRisposta_tempoMedioRisposta,
  721.                 ServletUtils.boolToCheckBoxStatus(false),   // opzioniAvanzate
  722.                 "",     // transfer_mode,
  723.                 "",     // transfer_mode_chunk_size,
  724.                 "",     // redirect_mode,
  725.                 "",     // redirect_max_hop,
  726.                 null,   // requestOutputFileName,
  727.                 null,   // requestOutputFileName_permissions,
  728.                 null,   // requestOutputFileNameHeaders,
  729.                 null,   // requestOutputFileNameHeaders_permissions,
  730.                 null,   // requestOutputParentDirCreateIfNotExists,
  731.                 null,   // requestOutputOverwriteIfExists,
  732.                 null,   // responseInputMode,
  733.                 null,   // responseInputFileName,
  734.                 null,   // responseInputFileNameHeaders,
  735.                 null,   // responseInputDeleteAfterRead,
  736.                 null,   // responseInputWaitTime,
  737.                 null,   // erogazioneSoggetto, Come da codice console.
  738.                 null,   // erogazioneRuolo non viene utilizzato.
  739.                 erogazioneAutenticazione, // erogazioneAutenticazione
  740.                 ServletUtils.boolToCheckBoxStatus(erogazioneAutenticazioneOpzionale),                   // erogazioneAutenticazioneOpzionale
  741.                 erogazioneAutenticazionePrincipal, // erogazioneAutenticazionePrincipal
  742.                 erogazioneAutenticazioneParametroList, // erogazioneAutenticazioneParametroList
  743.                 AutorizzazioneUtilities.convertToStato(erogazioneAutorizzazione), // erogazioneAutorizzazione                                                           // erogazioneAutorizzazione QUESTO E' lo STATO dell'autorizzazione
  744.                 ServletUtils.boolToCheckBoxStatus( erogazioneAutorizzazioneAutenticati ),           // erogazioneAutorizzazioneAutenticati,
  745.                 ServletUtils.boolToCheckBoxStatus( erogazioneAutorizzazioneRuoli ),             // erogazioneAutorizzazioneRuoli,
  746.                 erogazioneAutorizzazioneRuoliTipologia,             // erogazioneAutorizzazioneRuoliTipologia,
  747.                 erogazioneAutorizzazioneRuoliMatch,     // erogazioneAutorizzazioneRuoliMatch,  AllAnyEnum == RuoloTipoMatch
  748.                 env.isSupportatoAutenticazioneSoggetti,
  749.                 isErogazione,                                                   // generaPACheckSoggetto (Un'erogazione genera una porta applicativa)
  750.                 listExtendedConnettore,
  751.                 null,                                                                   // fruizioneServizioApplicativo
  752.                 null,                                                                   // Ruolo fruizione, non viene utilizzato.
  753.                 fruizioneAutenticazione, // fruizioneAutenticazione
  754.                 ServletUtils.boolToCheckBoxStatus(fruizioneAutenticazioneOpzionale), // fruizioneAutenticazioneOpzionale
  755.                 fruizioneAutenticazionePrincipal, // fruizioneAutenticazionePrincipal
  756.                 fruizioneAutenticazioneParametroList, // fruizioneAutenticazioneParametroList
  757.                 AutorizzazioneUtilities.convertToStato(fruizioneAutorizzazione),        // fruizioneAutorizzazione  
  758.                 ServletUtils.boolToCheckBoxStatus( fruizioneAutorizzazioneAutenticati ),                // fruizioneAutorizzazioneAutenticati,
  759.                 ServletUtils.boolToCheckBoxStatus( fruizioneAutorizzazioneRuoli ),                  // fruizioneAutorizzazioneRuoli,
  760.                 fruizioneAutorizzazioneRuoliTipologia,      // fruizioneAutorizzazioneRuoliTipologia,
  761.                 fruizioneAutorizzazioneRuoliMatch,      // fruizioneAutorizzazioneRuoliMatch,
  762.                 env.tipo_protocollo,
  763.                 xamlPolicy,                                                                 //allegatoXacmlPolicy,
  764.                 "",
  765.                 null,       // tipoFruitore
  766.                 null,   // nomeFruitore
  767.                 autenticazioneToken,
  768.                 tokenPolicy,
  769.                
  770.                 apiKey ? org.openspcoop2.web.lib.mvc.Costanti.CHECK_BOX_ENABLED : org.openspcoop2.web.lib.mvc.Costanti.CHECK_BOX_DISABLED, // autenticazioneApiKey
  771.                 apiKey &&
  772.                         env.erogazioniHelper.isAutenticazioneApiKeyUseOAS3Names(
  773.                                 httpApiKey!=null ? evalnull(httpApiKey::getApiKeyHeader) : null,
  774.                                 httpApiKey!=null ? evalnull(httpApiKey::getAppIdHeader) : null
  775.                 ), // useOAS3Names
  776.                 apiKey &&
  777.                     env.erogazioniHelper.isAutenticazioneApiKeyUseAppId(
  778.                             httpApiKey!=null ? evalnull(httpApiKey::getAppId) : null
  779.                 ), // useAppId
  780.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKeyHeader ) : null, // apiKeyHeader
  781.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKey ) : null, // apiKeyValue
  782.                 httpApiKey!=null ? evalnull( httpApiKey::getAppIdHeader ) : null, // appIdHeader
  783.                 httpApiKey!=null ? evalnull( httpApiKey::getAppId ) : null, // appIdValue      
  784.                
  785.                 false, // erogazioneServizioApplicativoServerEnabled,
  786.                 null, // rogazioneServizioApplicativoServer,
  787.                 canaleStato, canale, gestioneCanaliEnabled
  788.             )) {
  789.             throw FaultCode.RICHIESTA_NON_VALIDA.toException( StringEscapeUtils.unescapeHtml( env.pd.getMessage()) );
  790.         }
  791.        
  792.        
  793.     }
  794.    
  795.     public static final List<IDSoggettoDB> getSoggettiCompatibiliAutorizzazione( CredenzialeTipo tipoAutenticazione, Boolean appId, IdSoggetto erogatore, ErogazioniEnv env ) throws DriverRegistroServiziException, DriverConfigurazioneException {
  796.        
  797.         PddTipologia pddTipologiaSoggettoAutenticati = null;
  798.         boolean gestioneErogatoriSoggettiAutenticatiEscludiSoggettoErogatore = false;
  799.        
  800.        
  801.         if(env.apsCore.isMultitenant() && env.apsCore.getMultitenantSoggettiErogazioni()!=null) {
  802.             switch (env.apsCore.getMultitenantSoggettiErogazioni()) {
  803.                 case SOLO_SOGGETTI_ESTERNI:
  804.                     pddTipologiaSoggettoAutenticati = PddTipologia.ESTERNO;
  805.                     break;
  806.                 case ESCLUDI_SOGGETTO_EROGATORE:
  807.                     gestioneErogatoriSoggettiAutenticatiEscludiSoggettoErogatore = true;
  808.                     break;
  809.                 case TUTTI:
  810.                     break;
  811.                 }
  812.         }
  813.        
  814.         List<String> tipiSoggettiGestitiProtocollo = env.soggettiCore.getTipiSoggettiGestitiProtocollo(env.tipo_protocollo);
  815.        
  816.         // calcolo soggetti compatibili con tipi protocollo supportati dalla pa e credenziali indicate
  817.         List<IDSoggettoDB> list = env.soggettiCore.getSoggettiFromTipoAutenticazione(tipiSoggettiGestitiProtocollo, null, tipoAutenticazione, appId, pddTipologiaSoggettoAutenticati);
  818.        
  819.         if( !list.isEmpty() && gestioneErogatoriSoggettiAutenticatiEscludiSoggettoErogatore ) {
  820.             for (int i = 0; i < list.size(); i++) {
  821.                 IDSoggettoDB soggettoCheck = list.get(i);
  822.                 if(soggettoCheck.getTipo().equals(erogatore.getTipo()) && soggettoCheck.getNome().equals(erogatore.getNome())) {
  823.                     list.remove(i);
  824.                     break;
  825.                 }
  826.             }
  827.         }
  828.        
  829.         return list;
  830.     }

  831.     public static org.openspcoop2.utils.BooleanNullable getAutenticazioneOpzionale(Object authn) {
  832.         if(authn!=null) {
  833.             if(authn instanceof APIImplAutenticazioneBasic) {
  834.                 return new org.openspcoop2.utils.BooleanNullable(((APIImplAutenticazioneBasic)authn).isOpzionale());
  835.             }
  836.             else if(authn instanceof APIImplAutenticazioneHttps) {
  837.                 return new org.openspcoop2.utils.BooleanNullable(((APIImplAutenticazioneHttps)authn).isOpzionale());
  838.             }
  839.             else if(authn instanceof APIImplAutenticazionePrincipal) {
  840.                 return new org.openspcoop2.utils.BooleanNullable(((APIImplAutenticazionePrincipal)authn).isOpzionale());
  841.             }
  842.             else if(authn instanceof APIImplAutenticazioneApiKey) {
  843.                 return new org.openspcoop2.utils.BooleanNullable(((APIImplAutenticazioneApiKey)authn).isOpzionale());
  844.             }
  845.             else if(authn instanceof APIImplAutenticazioneCustom) {
  846.                 return new org.openspcoop2.utils.BooleanNullable(((APIImplAutenticazioneCustom)authn).isOpzionale());
  847.             }
  848.         }
  849.         return org.openspcoop2.utils.BooleanNullable.NULL();
  850.     }
  851.    
  852.     public static TipoAutenticazionePrincipal getTipoAutenticazionePrincipal(Object authn){
  853.         if(authn instanceof APIImplAutenticazionePrincipal) {
  854.            
  855.             APIImplAutenticazionePrincipal authPrincipal = (APIImplAutenticazionePrincipal) authn;
  856.             TipoAutenticazioneEnum tipo = authPrincipal.getTipo();
  857.            
  858.             if(TipoAutenticazioneEnum.PRINCIPAL.equals(tipo)) {
  859.                 try {
  860.                     return Enums.tipoAutenticazionePrincipalFromRest.get(authPrincipal.getTipoPrincipal());
  861.                 } catch (Exception e) {
  862.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione principal non è correttamente definita: " + e.getMessage() );
  863.                 }
  864.             }
  865.         }
  866.         return null;
  867.     }

  868.     public static List<String> getAutenticazioneParametroList(ErogazioniEnv env,TipoAutenticazioneEnum tipo, Object authn) {
  869.         if(TipoAutenticazioneEnum.HTTP_BASIC.equals(tipo)) {
  870.            
  871.             APIImplAutenticazioneBasic authnBasic = null;
  872.             if(authn!=null) {
  873.                 if(authn instanceof APIImplAutenticazioneBasic) {
  874.                     authnBasic = (APIImplAutenticazioneBasic) authn;
  875.                 }
  876.                 else {
  877.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione '"+tipo+"' non è correttamente definita (trovata configurazione '"+authn.getClass().getName()+"')"  );
  878.                 }
  879.             }
  880.            
  881.             if(authnBasic!=null) {
  882.                
  883.                 List<Proprieta> listConfig = new ArrayList<>();
  884.                 if(authnBasic.isForward()!=null) {
  885.                     Proprieta propertyAutenticazione = new Proprieta();
  886.                     propertyAutenticazione.setNome(ParametriAutenticazioneBasic.CLEAN_HEADER_AUTHORIZATION);
  887.                     if(authnBasic.isForward().booleanValue()) {
  888.                         propertyAutenticazione.setValore(ParametriAutenticazioneBasic.CLEAN_HEADER_AUTHORIZATION_FALSE);
  889.                     }
  890.                     else {
  891.                         propertyAutenticazione.setValore(ParametriAutenticazioneBasic.CLEAN_HEADER_AUTHORIZATION_TRUE);
  892.                     }
  893.                     listConfig.add(propertyAutenticazione);
  894.                 }
  895.                
  896.                 if(!listConfig.isEmpty()) {
  897.                     return env.stationCore.getParametroAutenticazione(Enums.tipoAutenticazioneFromRest.get(tipo).toString(), listConfig);
  898.                 }
  899.             }
  900.            
  901.         }
  902.         else if(TipoAutenticazioneEnum.PRINCIPAL.equals(tipo)) {
  903.            
  904.             APIImplAutenticazionePrincipal authnPrincipal = null;
  905.             if(authn!=null) {
  906.                 if(authn instanceof APIImplAutenticazionePrincipal) {
  907.                     authnPrincipal = (APIImplAutenticazionePrincipal) authn;
  908.                 }
  909.                 else {
  910.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione '"+tipo+"' non è correttamente definita (trovata configurazione '"+authn.getClass().getName()+"')"  );
  911.                 }
  912.             }
  913.            
  914.             if(authnPrincipal!=null) {  
  915.                
  916.                 TipoAutenticazionePrincipal autenticazionePrincipal = Enums.tipoAutenticazionePrincipalFromRest.get(authnPrincipal.getTipoPrincipal());
  917.                 Proprieta propTipoAuthn = new Proprieta();
  918.                 propTipoAuthn.setNome(ParametriAutenticazionePrincipal.TIPO_AUTENTICAZIONE);
  919.                 propTipoAuthn.setValore(autenticazionePrincipal.getValue());
  920.                
  921.                 List<Proprieta> listConfig = new ArrayList<>();
  922.                 listConfig.add(propTipoAuthn);
  923.                 switch (autenticazionePrincipal) {
  924.                 case CONTAINER:
  925.                 case INDIRIZZO_IP:
  926.                 case INDIRIZZO_IP_X_FORWARDED_FOR:
  927.                     break;
  928.                 case HEADER:
  929.                     if(authnPrincipal.getNome()==null) {
  930.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è stato indicato il nome di un header http per l'autenticazione principal '"+authnPrincipal.getTipoPrincipal()+"' indicata");
  931.                     }
  932.                     Proprieta propertyAutenticazione = new Proprieta();
  933.                     propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.NOME);
  934.                     propertyAutenticazione.setValore(authnPrincipal.getNome());
  935.                     listConfig.add(propertyAutenticazione);
  936.                     break;
  937.                 case FORM:
  938.                     if(authnPrincipal.getNome()==null) {
  939.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è stato indicato il nome di un parametro della url per l'autenticazione principal '"+authnPrincipal.getTipoPrincipal()+"' indicata");
  940.                     }
  941.                     propertyAutenticazione = new Proprieta();
  942.                     propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.NOME);
  943.                     propertyAutenticazione.setValore(authnPrincipal.getNome());
  944.                     listConfig.add(propertyAutenticazione);
  945.                     break;
  946.                 case URL:
  947.                     if(authnPrincipal.getPattern()==null) {
  948.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è stata fornita una espressione regolare per l'autenticazione principal '"+authnPrincipal.getTipoPrincipal()+"' indicata");
  949.                     }
  950.                     propertyAutenticazione = new Proprieta();
  951.                     propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.PATTERN);
  952.                     propertyAutenticazione.setValore(authnPrincipal.getPattern());
  953.                     listConfig.add(propertyAutenticazione);
  954.                     break;
  955.                 case TOKEN:
  956.                     if(authnPrincipal.getToken()==null) {
  957.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è stato indicato il token claim, da cui estrarre il principal, per l'autenticazione '"+authnPrincipal.getTipoPrincipal()+"' indicata");
  958.                     }
  959.                     if(TipoAutenticazionePrincipalToken.CUSTOM.equals(authnPrincipal.getToken())) {
  960.                         if(authnPrincipal.getNome()==null) {
  961.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è stato indicato il nome del token claim, da cui estrarre il principal, per l'autenticazione '"+authnPrincipal.getTipoPrincipal()+"' indicata");
  962.                         }
  963.                     }
  964.                     propertyAutenticazione = new Proprieta();
  965.                     propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.TOKEN_CLAIM);
  966.                     switch (authnPrincipal.getToken()) {
  967.                     case SUBJECT:
  968.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.TOKEN_CLAIM_SUBJECT);
  969.                         break;
  970.                     case CLIENTID:
  971.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CLIENT_ID);  
  972.                         break;
  973.                     case USERNAME:
  974.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.TOKEN_CLAIM_USERNAME);    
  975.                         break;
  976.                     case EMAIL:
  977.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.TOKEN_CLAIM_EMAIL);  
  978.                         break;
  979.                     case CUSTOM:
  980.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CUSTOM);  
  981.                         break;
  982.                     }
  983.                     listConfig.add(propertyAutenticazione);
  984.                    
  985.                     if(TipoAutenticazionePrincipalToken.CUSTOM.equals(authnPrincipal.getToken())) {
  986.                         propertyAutenticazione = new Proprieta();
  987.                         propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.NOME);
  988.                         propertyAutenticazione.setValore(authnPrincipal.getNome());
  989.                         listConfig.add(propertyAutenticazione);
  990.                     }
  991.                    
  992.                     break;
  993.                 }
  994.                
  995.                 if(authnPrincipal.isForward()!=null) {
  996.                    
  997.                     Proprieta propertyAutenticazione = new Proprieta();
  998.                     propertyAutenticazione.setNome(ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL);
  999.                     if(authnPrincipal.isForward()) {
  1000.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_FALSE);
  1001.                     }
  1002.                     else {
  1003.                         propertyAutenticazione.setValore(ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_TRUE);
  1004.                     }
  1005.                     listConfig.add(propertyAutenticazione);
  1006.                 }
  1007.                
  1008.                 if(!listConfig.isEmpty()) {
  1009.                     return env.stationCore.getParametroAutenticazione(tipo.toString(), listConfig);
  1010.                 }
  1011.             }
  1012.             else {
  1013.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Autenticazione principal non correttamente formata");
  1014.             }
  1015.         }
  1016.         else if(TipoAutenticazioneEnum.API_KEY.equals(tipo)) {
  1017.            
  1018.             APIImplAutenticazioneApiKey authnApiKey = null;
  1019.             if(authn!=null) {
  1020.                 if(authn instanceof APIImplAutenticazioneApiKey) {
  1021.                     authnApiKey = (APIImplAutenticazioneApiKey) authn;
  1022.                 }
  1023.                 else {
  1024.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione '"+tipo+"' non è correttamente definita (trovata configurazione '"+authn.getClass().getName()+"')"  );
  1025.                 }
  1026.             }
  1027.            
  1028.             if(authn!=null) {
  1029.                
  1030.                 List<Proprieta> listConfig = new ArrayList<>();
  1031.                
  1032.                 // posizione 0: appId
  1033.                 _addProprieta(ParametriAutenticazioneApiKey.APP_ID,
  1034.                         authnApiKey.isAppId()!=null && authnApiKey.isAppId() ? ParametriAutenticazioneApiKey.APP_ID_TRUE : ParametriAutenticazioneApiKey.APP_ID_FALSE,
  1035.                                 listConfig);

  1036.                 // posizione 1: queryParameter
  1037.                 if(authnApiKey.getPosizione()!=null && authnApiKey.getPosizione().isQueryParameter()!=null) {
  1038.                     _addProprieta(ParametriAutenticazioneApiKey.QUERY_PARAMETER,
  1039.                             authnApiKey.getPosizione().isQueryParameter() ?
  1040.                                     ParametriAutenticazioneApiKey.QUERY_PARAMETER_TRUE : ParametriAutenticazioneApiKey.QUERY_PARAMETER_FALSE,
  1041.                                     listConfig);
  1042.                 }
  1043.                 else {
  1044.                     APIImplAutenticazioneApiKeyPosizione defaultValues = new APIImplAutenticazioneApiKeyPosizione(); // uso i default
  1045.                     _addProprieta(ParametriAutenticazioneApiKey.QUERY_PARAMETER,
  1046.                             defaultValues.isQueryParameter() ?
  1047.                                     ParametriAutenticazioneApiKey.QUERY_PARAMETER_TRUE : ParametriAutenticazioneApiKey.QUERY_PARAMETER_FALSE,
  1048.                                     listConfig);
  1049.                 }
  1050.                
  1051.                 // posizione 2: header
  1052.                 if(authnApiKey.getPosizione()!=null && authnApiKey.getPosizione().isHeader()!=null) {
  1053.                     _addProprieta(ParametriAutenticazioneApiKey.HEADER,
  1054.                             authnApiKey.getPosizione().isHeader() ?
  1055.                                     ParametriAutenticazioneApiKey.HEADER_TRUE : ParametriAutenticazioneApiKey.HEADER_FALSE,
  1056.                                     listConfig);                
  1057.                 }
  1058.                 else {
  1059.                     APIImplAutenticazioneApiKeyPosizione defaultValues = new APIImplAutenticazioneApiKeyPosizione(); // uso i default
  1060.                     _addProprieta(ParametriAutenticazioneApiKey.HEADER,
  1061.                             defaultValues.isHeader() ?
  1062.                                     ParametriAutenticazioneApiKey.HEADER_TRUE : ParametriAutenticazioneApiKey.HEADER_FALSE,
  1063.                                     listConfig);
  1064.                 }
  1065.                
  1066.                 // posizione 3: cookie
  1067.                 if(authnApiKey.getPosizione()!=null && authnApiKey.getPosizione().isCookie()!=null) {
  1068.                     _addProprieta(ParametriAutenticazioneApiKey.COOKIE,
  1069.                             authnApiKey.getPosizione().isCookie() ?
  1070.                                     ParametriAutenticazioneApiKey.COOKIE_TRUE : ParametriAutenticazioneApiKey.COOKIE_FALSE,
  1071.                                     listConfig);    
  1072.                 }
  1073.                 else {
  1074.                     APIImplAutenticazioneApiKeyPosizione defaultValues = new APIImplAutenticazioneApiKeyPosizione(); // uso i default
  1075.                     _addProprieta(ParametriAutenticazioneApiKey.COOKIE,
  1076.                             defaultValues.isCookie() ?
  1077.                                     ParametriAutenticazioneApiKey.COOKIE_TRUE : ParametriAutenticazioneApiKey.COOKIE_FALSE,
  1078.                                     listConfig);
  1079.                 }
  1080.                
  1081.                 // posizione 4: useOAS3Names
  1082.                 boolean apiKeyNamesCustom = false;
  1083.                 boolean appIdNamesCustom = false;
  1084.                 if(authnApiKey.getApiKeyNomi()!=null) {
  1085.                     if(StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getQueryParameter()) ||
  1086.                             StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getHeader()) ||
  1087.                             StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getCookie())) {
  1088.                         apiKeyNamesCustom = true;
  1089.                     }
  1090.                 }
  1091.                 if(authnApiKey.getAppIdNomi()!=null) {
  1092.                     if(StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getQueryParameter()) ||
  1093.                             StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getHeader()) ||
  1094.                             StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getCookie())) {
  1095.                         appIdNamesCustom = true;
  1096.                     }
  1097.                 }
  1098.                 _addProprieta(ParametriAutenticazioneApiKey.USE_OAS3_NAMES,
  1099.                         apiKeyNamesCustom || appIdNamesCustom  ? ParametriAutenticazioneApiKey.USE_OAS3_NAMES_FALSE : ParametriAutenticazioneApiKey.USE_OAS3_NAMES_TRUE,
  1100.                                 listConfig);
  1101.                
  1102.                 // posizione 5: cleanApiKey
  1103.                 _addProprieta(ParametriAutenticazioneApiKey.CLEAN_API_KEY,
  1104.                         authnApiKey.isApiKeyForward()!=null && authnApiKey.isApiKeyForward() ? ParametriAutenticazioneApiKey.CLEAN_API_KEY_FALSE : ParametriAutenticazioneApiKey.CLEAN_API_KEY_TRUE,
  1105.                                 listConfig);    
  1106.                
  1107.                 // posizione 6: cleanAppId
  1108.                 _addProprieta(ParametriAutenticazioneApiKey.CLEAN_APP_ID,
  1109.                         authnApiKey.isAppIdForward()!=null && authnApiKey.isAppIdForward() ? ParametriAutenticazioneApiKey.CLEAN_APP_ID_FALSE : ParametriAutenticazioneApiKey.CLEAN_APP_ID_TRUE,
  1110.                                 listConfig);
  1111.                
  1112.                 // posizione 7: queryParameterApiKey
  1113.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_API_KEY,
  1114.                         apiKeyNamesCustom && StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getQueryParameter()) ? authnApiKey.getApiKeyNomi().getQueryParameter() : ParametriAutenticazioneApiKey.DEFAULT_QUERY_PARAMETER_API_KEY,
  1115.                                 listConfig);
  1116.                
  1117.                 // posizione 8: headerApiKey
  1118.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_HEADER_API_KEY,
  1119.                         apiKeyNamesCustom && StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getHeader()) ? authnApiKey.getApiKeyNomi().getHeader() : ParametriAutenticazioneApiKey.DEFAULT_HEADER_API_KEY,
  1120.                                 listConfig);
  1121.                
  1122.                 // posizione 9: cookieApiKey
  1123.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_COOKIE_API_KEY,
  1124.                         apiKeyNamesCustom && StringUtils.isNotEmpty(authnApiKey.getApiKeyNomi().getCookie()) ? authnApiKey.getApiKeyNomi().getCookie() : ParametriAutenticazioneApiKey.DEFAULT_COOKIE_API_KEY,
  1125.                                 listConfig);
  1126.                
  1127.                 // posizione 10: queryParameterAppId
  1128.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_APP_ID,
  1129.                         appIdNamesCustom && StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getQueryParameter()) ? authnApiKey.getAppIdNomi().getQueryParameter() : ParametriAutenticazioneApiKey.DEFAULT_QUERY_PARAMETER_APP_ID,
  1130.                                 listConfig);

  1131.                 // posizione 11: headerAppId
  1132.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_HEADER_APP_ID,
  1133.                         appIdNamesCustom && StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getHeader()) ? authnApiKey.getAppIdNomi().getHeader() : ParametriAutenticazioneApiKey.DEFAULT_HEADER_APP_ID,
  1134.                                 listConfig);

  1135.                 // posizione 12: cookieAppId
  1136.                 _addProprieta(ParametriAutenticazioneApiKey.NOME_COOKIE_APP_ID,
  1137.                         appIdNamesCustom && StringUtils.isNotEmpty(authnApiKey.getAppIdNomi().getCookie()) ? authnApiKey.getAppIdNomi().getCookie() : ParametriAutenticazioneApiKey.DEFAULT_COOKIE_APP_ID,
  1138.                                 listConfig);

  1139.                 if(!listConfig.isEmpty()) {
  1140.                     return env.stationCore.getParametroAutenticazione(Enums.tipoAutenticazioneFromRest.get(tipo).toString(), listConfig);
  1141.                 }
  1142.             }
  1143.            
  1144.         }
  1145.         return null;
  1146.     }

  1147.     private static final void _addProprieta(String nome, String valore, List<Proprieta> listConfig) {
  1148.         Proprieta propertyAutenticazione = new Proprieta();
  1149.         propertyAutenticazione.setNome(nome);
  1150.         propertyAutenticazione.setValore(valore);
  1151.         listConfig.add(propertyAutenticazione);
  1152.     }
  1153.    
  1154.     public static final void serviziCheckData(  
  1155.             TipoOperazione tipoOp,
  1156.             ErogazioniEnv env,
  1157.             AccordoServizioParteComuneSintetico as,
  1158.             AccordoServizioParteSpecifica asps,
  1159.             Optional<IdSoggetto> fruitore,
  1160.             APIImpl impl

  1161.             ) throws Exception {
  1162.        
  1163.         boolean generaPortaApplicativa = !fruitore.isPresent();
  1164.         IdSoggetto erogatore = new IdSoggetto( new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()));
  1165.         erogatore.setId(asps.getIdSoggetto());
  1166.        
  1167.          if (impl == null) {
  1168.              impl = new APIImpl();
  1169.              impl.setConnettore(new BaseConnettoreHttp());
  1170.          }
  1171.        
  1172.          boolean accordoPrivato = as.getPrivato()!=null && as.getPrivato();    
  1173.          
  1174.          List<PortTypeSintetico> ptList = AccordiServizioParteSpecificaUtilities.getListaPortTypes(as, env.apsHelper);
  1175.          
  1176.          String[] ptArray =  ptList.stream()
  1177.                 .map( p -> p.getNome() )
  1178.                 .toArray(String[]::new);
  1179.        
  1180.          // Determino i soggetti compatibili
  1181.         ConsoleSearch searchSoggetti = new ConsoleSearch(true);
  1182.         searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_PROTOCOLLO, env.tipo_protocollo);
  1183.         boolean fruizioniEscludiSoggettoFruitore = false;
  1184.        
  1185.         // In caso di Fruizione i soggetti erogatori compatibili sono determinati dalla configurazione di GovWay (tutti, escluso erogatore, esterni)
  1186.         if ( fruitore.isPresent() ) {
  1187.             ConfigurazioneCore confCore = new ConfigurazioneCore(env.stationCore);
  1188.             PortaDelegataSoggettiErogatori confFruizioneErogatori = confCore.getConfigurazioneGenerale().getMultitenant().getFruizioneSceltaSoggettiErogatori();
  1189.            
  1190.             if (confFruizioneErogatori == PortaDelegataSoggettiErogatori.SOGGETTI_ESTERNI) {
  1191.                 searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE);
  1192.             }
  1193.             else if ( confFruizioneErogatori == PortaDelegataSoggettiErogatori.ESCLUDI_SOGGETTO_FRUITORE ) {
  1194.                 fruizioniEscludiSoggettoFruitore = true;
  1195.             }
  1196.            
  1197.         } // In caso di erogazione invece possiamo solo assegnare soggetti appartenenti a una porta di tipo operativo.
  1198.         else {
  1199.             searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE);
  1200.         }
  1201.        
  1202.         List<Soggetto> listSoggetti = env.soggettiCore.soggettiRegistroList(null, searchSoggetti);
  1203.        
  1204.         final boolean escludiFruitore = fruizioniEscludiSoggettoFruitore;
  1205.         String[] soggettiCompatibili = listSoggetti.stream()
  1206.                 .filter( s -> generaPortaApplicativa || ( !escludiFruitore || (s.getId().longValue() != fruitore.get().getId().longValue()) ) )
  1207.                 .map( s -> s.getId().toString())
  1208.                 .toArray(String[]::new);
  1209.        
  1210.         if (soggettiCompatibili.length == 0) {
  1211.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non ci sono soggetti compatibili per erogare il servizio");
  1212.         }
  1213.        
  1214.        
  1215.         // Determino la lista Api
  1216.         List<IDAccordoDB> listaIdAPI = AccordiServizioParteSpecificaUtilities.getListaIdAPI(
  1217.                 env.tipo_protocollo,
  1218.                 env.userLogin,
  1219.                 env.apsCore,
  1220.                 env.apsHelper
  1221.             );
  1222.        
  1223.         String[] accordiList =  listaIdAPI.stream()
  1224.                 .map( a -> a.getId().toString() )
  1225.                 .toArray(String[]::new);
  1226.        
  1227.         final BaseConnettoreHttp conn = impl.getConnettore();
  1228.         final ConnettoreConfigurazioneApiKey httpApiKey = conn.getAutenticazioneApikey();
  1229.         boolean apiKey = (httpApiKey!=null && httpApiKey.getApiKey()!=null && StringUtils.isNotEmpty(httpApiKey.getApiKey()));
  1230.         final ConnettoreConfigurazioneHttps httpsConf    = conn.getAutenticazioneHttps();
  1231.         final ConnettoreConfigurazioneHttpBasic httpConf     = conn.getAutenticazioneHttp();
  1232.        
  1233.         final String endpointtype = httpsConf != null ? TipiConnettore.HTTPS.getNome() : TipiConnettore.HTTP.getNome();
  1234.        

  1235.         final Properties parametersPOST = null;
  1236.         org.openspcoop2.core.registry.Connettore conTmp = null;
  1237.         List<ExtendedConnettore> listExtendedConnettore =
  1238.                 ServletExtendedConnettoreUtils.getExtendedConnettore(conTmp, ConnettoreServletType.ACCORDO_SERVIZIO_PARTE_SPECIFICA_ADD, env.apsHelper,
  1239.                             parametersPOST, false, endpointtype); // uso endpointtype per capire se è la prima volta che entro
  1240.    
  1241.        
  1242.         final ConnettoreConfigurazioneHttpsClient httpsClient = httpsConf!=null ? evalnull( httpsConf::getClient ) : null;
  1243.         final ConnettoreConfigurazioneHttpsServer httpsServer = httpsConf!=null ? evalnull( httpsConf::getServer ) : null;
  1244.         final ConnettoreConfigurazioneProxy       proxy       = conn.getProxy();
  1245.         final ConnettoreConfigurazioneTimeout     timeoutConf = conn.getTempiRisposta();
  1246.         final String tokenPolicy = conn.getTokenPolicy();
  1247.         final boolean autenticazioneToken = tokenPolicy!=null;

  1248.        
  1249.         final boolean httpsstato = httpsClient != null;
  1250.         final boolean http_stato = conn.getAutenticazioneHttp() != null;
  1251.         final boolean proxy_enabled = conn.getProxy() != null;
  1252.         final boolean tempiRisposta_enabled = conn.getTempiRisposta() != null;
  1253.        
  1254.         String httpskeystore = null;
  1255.         if ( httpsClient != null ) {
  1256.             if ( httpsClient.getKeystorePath() != null || httpsClient.getKeystoreTipo() != null ) {
  1257.                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_RIDEFINISCI;  
  1258.             }
  1259.             else
  1260.                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  1261.         }

  1262.         // Autenticazione e autorizzazione sono opzionali nel json.
  1263.         final OneOfAPIImplAutorizzazione authz = impl.getAutorizzazione();
  1264.         final OneOfAPIImplAutenticazione authn = impl.getAutenticazione();
  1265.        
  1266.         // Vincolo rilasciato
  1267.         // Se sono in modalità SPCoop non posso specificare l'autenticazione
  1268.         /**if ( env.profilo == ProfiloEnum.SPCOOP && generaPortaApplicativa && authn != null ) {
  1269.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è possibile specificare l'autenticazione per un servizio spcoop");
  1270.         }*/
  1271.        
  1272.         FonteEnum ruoliFonte = FonteEnum.QUALSIASI;
  1273.         String erogazioneRuolo = null;
  1274.         boolean isRichiedente = false;
  1275.         boolean isRuoli = false;
  1276.         String statoAutorizzazione = null;
  1277.         TipoAutenticazionePrincipal autenticazionePrincipal = null;
  1278.         List<String> autenticazioneParametroList = null;
  1279.         if(authn!=null) {
  1280.             autenticazionePrincipal = getTipoAutenticazionePrincipal(authn);
  1281.             autenticazioneParametroList = getAutenticazioneParametroList(env, authn.getTipo(), authn);
  1282.         }
  1283.         final BooleanNullable autenticazioneOpzionaleNullable = getAutenticazioneOpzionale(authn); // gestisce authn se null
  1284.         AllAnyEnum ruoliRichiesti = null;
  1285.        
  1286.         if ( generaPortaApplicativa && as.getServiceBinding() == ServiceBinding.SOAP && authz != null && authz.getTipo() != null ) {
  1287.             switch ( authz.getTipo() ) {
  1288.             case ABILITATO:
  1289.                
  1290.                 if(authz instanceof APIImplAutorizzazioneAbilitataNew) {
  1291.                
  1292.                     APIImplAutorizzazioneAbilitataNew authzAbilitata = (APIImplAutorizzazioneAbilitataNew) authz;
  1293.                    
  1294.                     if(authzAbilitata.getRuoliFonte()!=null) {
  1295.                         ruoliFonte = authzAbilitata.getRuoliFonte();
  1296.                     }
  1297.                     erogazioneRuolo = authzAbilitata.getRuolo();
  1298.                     isRichiedente = authzAbilitata.isRichiedente();
  1299.                     isRuoli = authzAbilitata.isRuoli();
  1300.                     statoAutorizzazione = AutorizzazioneUtilities.STATO_ABILITATO;
  1301.                     ruoliRichiesti = authzAbilitata.getRuoliRichiesti();
  1302.                 }
  1303.                 else {
  1304.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  1305.                 }
  1306.                 break;
  1307.             case XACML_POLICY:
  1308.                
  1309.                 if(authz instanceof APIImplAutorizzazioneXACML) {
  1310.                    
  1311.                     APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  1312.                
  1313.                     if (authzXacml.getPolicy() == null) {
  1314.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Campo obbligatorio 'policy' non presente nell'autorizzazione indicata");
  1315.                     }
  1316.                     if(authzXacml.getRuoliFonte()!=null) {
  1317.                         ruoliFonte = authzXacml.getRuoliFonte();
  1318.                     }
  1319.                     statoAutorizzazione = AutorizzazioneUtilities.STATO_XACML_POLICY;
  1320.                 }
  1321.                 else {
  1322.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  1323.                 }
  1324.                 break;
  1325.             case DISABILITATO:
  1326.                 statoAutorizzazione = AutorizzazioneUtilities.STATO_DISABILITATO;
  1327.                 break;
  1328.             case CUSTOM:
  1329.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo di autorizzazione '"+authz.getTipo()+"' non utilizzabile");
  1330.             }
  1331.         }
  1332.        
  1333.         if (isRichiedente) {
  1334.            
  1335.             final APIImplAutorizzazioneAbilitataNew configAuthzFinal = (APIImplAutorizzazioneAbilitataNew) authz;
  1336.                        
  1337.             // Se ho abilitata l'autorizzazione puntuale, devo aver anche abilitata l'autenticazione
  1338.             if ( env.isSupportatoAutenticazioneSoggetti &&
  1339.                     (authn == null || authn.getTipo() == TipoAutenticazioneEnum.DISABILITATO)  &&
  1340.                     (!generaPortaApplicativa || !env.isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazione)
  1341.                     ){
  1342.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(AccordiServizioParteSpecificaCostanti.MESSAGGIO_ERRORE_ABILITARE_AUTENTICAZIONE_PER_AUTORIZZAZIONE_PUNTUALE);
  1343.             }
  1344.        
  1345.             if ( !StringUtils.isEmpty(configAuthzFinal.getSoggetto()) ) {
  1346.                
  1347.                 CredenzialeTipo credTipo = evalnull( () -> Enums.credenzialeTipoFromTipoAutenticazione.get(authn.getTipo()) );
  1348.                 Boolean appId = null; // da fare APIKEY
  1349.                 Optional<String> soggettoCompatibile = getSoggettiCompatibiliAutorizzazione(credTipo, appId, env.idSoggetto, env)
  1350.                         .stream()
  1351.                         .map( IDSoggettoDB::getNome )
  1352.                         .filter( s -> s.equals( configAuthzFinal.getSoggetto() ) )
  1353.                         .findAny();
  1354.            
  1355.                 //Se ho scelto un soggetto, questo deve esistere ed essere compatibile con il profilo di autenticazione
  1356.                 if ( !soggettoCompatibile.isPresent() ) {
  1357.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il soggetto " + configAuthzFinal.getSoggetto() + " scelto per l'autorizzazione puntuale non esiste o non è compatibile con la modalità di autenticazione scelta");
  1358.                 }
  1359.             }
  1360.            
  1361.         }
  1362.        
  1363.         if (isRuoli) {
  1364.            
  1365.             final APIImplAutorizzazioneAbilitataNew configAuthzFinal = (APIImplAutorizzazioneAbilitataNew) authz;
  1366.            
  1367.             if (!StringUtils.isEmpty(configAuthzFinal.getRuolo())) {
  1368.                 RuoliCore ruoliCore = new RuoliCore(env.stationCore);
  1369.                 // Il ruolo deve esistere
  1370.                 org.openspcoop2.core.registry.Ruolo regRuolo = null;
  1371.                 try {
  1372.                     regRuolo = ruoliCore.getRuolo(configAuthzFinal.getRuolo());
  1373.                 } catch (DriverConfigurazioneException e) {
  1374.                     // ignore
  1375.                 }
  1376.                
  1377.                 if (regRuolo == null) {
  1378.                     throw FaultCode.NOT_FOUND.toException("Non esiste nessun ruolo con nome " + configAuthzFinal.getRuolo());
  1379.                 }
  1380.             }
  1381.         }
  1382.        
  1383.    
  1384.         final BinaryParameter xamlPolicy = new BinaryParameter();
  1385.         if(authz instanceof APIImplAutorizzazioneXACML) {
  1386.             APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  1387.             xamlPolicy.setValue(authzXacml.getPolicy());
  1388.         }
  1389.         xamlPolicy.setName(CostantiControlStation.PARAMETRO_DOCUMENTO_SICUREZZA_XACML_POLICY);
  1390.        
  1391.        
  1392.         StringBuilder inUsoMessage = new StringBuilder();
  1393.        
  1394.         if ( AccordiServizioParteSpecificaUtilities.alreadyExists(
  1395.                 env.apsCore,
  1396.                 env.apsHelper,
  1397.                 erogatore.getId(),
  1398.                 env.idServizioFactory.getIDServizioFromAccordo(asps),
  1399.                 env.idAccordoFactory.getUriFromAccordo(as),
  1400.                 evalnull( () -> fruitore.get().getTipo() ),
  1401.                 evalnull( () -> fruitore.get().getNome() ),
  1402.                 env.tipo_protocollo,
  1403.                 asps.getVersioneProtocollo(),
  1404.                 asps.getPortType(),
  1405.                 ! generaPortaApplicativa,
  1406.                 generaPortaApplicativa,
  1407.                 inUsoMessage
  1408.             ) ) {
  1409.             throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml( inUsoMessage.toString() ));
  1410.         }

  1411.         /**final String tipoAutorString =   AutorizzazioneUtilities.convertToTipoAutorizzazioneAsString( authz.getTipo(),
  1412.                 isPuntuale,
  1413.                 isRuoli,
  1414.                 false,
  1415.                 ServletUtils.isCheckBoxEnabled(autorizzazioneScope),        
  1416.                 autorizzazione_tokenOptions,                    // Questo è il token claims
  1417.                 tipoRuoloFonte                                  // RuoliFonte: Qualsiasi, Registro, Esterna
  1418.             );*/
  1419.        
  1420.         boolean gestioneCanaliEnabled = env.gestioneCanali;
  1421.         String canale = null;
  1422.         if(gestioneCanaliEnabled) {
  1423.             if(impl instanceof Erogazione) {
  1424.                 canale = ((Erogazione)impl).getCanale();
  1425.             }
  1426.             else if(impl instanceof Fruizione) {
  1427.                 canale = ((Fruizione)impl).getCanale();
  1428.             }
  1429.             if(canale!=null &&
  1430.                 !env.canali.contains(canale)) {
  1431.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + canale + "' non è presente nel registro");
  1432.             }
  1433.         }
  1434.         String canaleStato = null;
  1435.         if(canale == null) {
  1436.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
  1437.         } else {
  1438.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
  1439.         }
  1440.        
  1441.         if (! env.apsHelper.serviziCheckData(                  
  1442.                 tipoOp,
  1443.                 soggettiCompatibili,        
  1444.                 accordiList,                
  1445.                 asps.getNome(),             // oldnome
  1446.                 asps.getTipo(),             // oldtipo
  1447.                 asps.getVersione(),         // oldversione
  1448.                 asps.getNome(),
  1449.                 asps.getTipo(),
  1450.                 erogatore.getId().toString(),   // idSoggErogatore
  1451.                 erogatore.getNome(),
  1452.                 erogatore.getTipo(),
  1453.                 as.getId().toString(),
  1454.                 env.apcCore.toMessageServiceBinding(as.getServiceBinding()),
  1455.                 "no",  //servcorr,
  1456.                 endpointtype, // endpointtype determinarlo dal connettore,
  1457.                 impl.getConnettore().getEndpoint(),
  1458.                 null,   // nome JMS
  1459.                 null,   // tipo JMS,
  1460.                 httpConf!=null ? evalnull( httpConf::getUsername ) : null,  
  1461.                 httpConf!=null ? evalnull( httpConf::getPassword ) : null,
  1462.                 null,   // initcont JMS,
  1463.                 null,   // urlpgk JMS,
  1464.                 null,   // provurl JMS
  1465.                 null,   // connfact JMS
  1466.                 null,   // sendas JMS,
  1467.                 new BinaryParameter(),      //  wsdlimpler
  1468.                 new BinaryParameter(),      //  wsdlimplfru
  1469.                 BaseHelper.evalorElse( () -> asps.getId().toString(), "0"),    
  1470.                 asps.getVersioneProtocollo(),   //  Il profilo è la versione protocollo in caso spcoop, è quello del soggetto erogatore.
  1471.                 asps.getPortType(),
  1472.                 ptArray,
  1473.                 accordoPrivato,
  1474.                 false,  // this.privato,
  1475.                 conn.getEndpoint(), // httpsurl,
  1476.                 evalnull( () ->  httpsConf.getTipologia().toString() ),             // I valori corrispondono con con org.openspcoop2.utils.transport.http.SSLConstants
  1477.                 BaseHelper.evalorElse( () -> httpsConf.isHostnameVerifier().booleanValue(), false ),                // this.httpshostverify,
  1478.                 (httpsConf!=null ? !httpsConf.isTrustAllServerCerts() : ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS), // httpsTrustVerifyCert
  1479.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePath ) : null,              // this.httpspath
  1480.                 evalnull( () -> ConnettoreHTTPApiHelper.getTruststoreType(httpsServer) ),       // this.httpstipo,
  1481.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePassword ) : null,          // this.httpspwd,
  1482.                 httpsServer!=null ? evalnull( httpsServer::getAlgoritmo ) : null,                   // this.httpsalgoritmo
  1483.                 httpsstato, //
  1484.                 httpskeystore,  
  1485.                 "", //  this.httpspwdprivatekeytrust
  1486.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePath ) : null,                    // httpspathkey
  1487.                 evalnull( () -> ConnettoreHTTPApiHelper.getKeystoreType(httpsClient) ),         // httpstipokey, coincide con ConnettoriCostanti.TIPOLOGIE_KEYSTORE
  1488.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePassword ) : null,            // httpspwdkey
  1489.                 httpsClient!=null ? evalnull( httpsClient::getKeyPassword ) : null,                 // httpspwdprivatekey
  1490.                 httpsClient!=null ? evalnull( httpsClient::getAlgoritmo ) : null,                   // httpsalgoritmokey
  1491.                 httpsClient!=null ? evalnull( httpsClient::getKeyAlias ) : null,                    // httpsKeyAlias
  1492.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreCrl ) : null,                   // httpsTrustStoreCRLs
  1493.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreOcspPolicy) : null,             // httpsTrustStoreOCSPPolicy
  1494.                 httpsClient!=null ? evalnull( httpsClient::getKeystoreByokPolicy) : null,               // httpsKeyStoreBYOKPolicy
  1495.                 null,                               // tipoconn Da debug = null.    
  1496.                 asps.getVersione().toString(), //as.getVersione().toString(),       // Versione aspc
  1497.                 false,                              // validazioneDocumenti Da debug = false
  1498.                 null,                               // Da Codice console
  1499.                 ServletUtils.boolToCheckBoxStatus(http_stato),  // "yes" se utilizziamo http.
  1500.                 ServletUtils.boolToCheckBoxStatus(proxy_enabled),          
  1501.                 proxy!=null ? evalnull( proxy::getHostname ) : null,
  1502.                 evalnull( () -> proxy.getPorta().toString() ),
  1503.                 proxy!=null ? evalnull( proxy::getUsername ) : null,
  1504.                 proxy!=null ? evalnull( proxy::getPassword ) : null,                
  1505.                 ServletUtils.boolToCheckBoxStatus(tempiRisposta_enabled),
  1506.                 evalnull( () -> timeoutConf.getConnectionTimeout().toString()),     // this.tempiRisposta_connectionTimeout,
  1507.                 evalnull( () -> timeoutConf.getConnectionReadTimeout().toString()),  // this.tempiRisposta_readTimeout,
  1508.                 evalnull( () -> timeoutConf.getTempoMedioRisposta().toString()),        // this.tempiRisposta_tempoMedioRisposta,
  1509.                 ServletUtils.boolToCheckBoxStatus(false),   // opzioniAvanzate
  1510.                 "",     // transfer_mode,
  1511.                 "",     // transfer_mode_chunk_size,
  1512.                 "",     // redirect_mode,
  1513.                 "",     // redirect_max_hop,
  1514.                 null,   // requestOutputFileName,
  1515.                 null,   // requestOutputFileName_permissions,
  1516.                 null,   // requestOutputFileNameHeaders,
  1517.                 null,   // requestOutputFileNameHeaders_permissions,
  1518.                 null,   // requestOutputParentDirCreateIfNotExists,
  1519.                 null,   // requestOutputOverwriteIfExists,
  1520.                 null,   // responseInputMode,
  1521.                 null,   // responseInputFileName,
  1522.                 null,   // responseInputFileNameHeaders,
  1523.                 null,   // responseInputDeleteAfterRead,
  1524.                 null,   // responseInputWaitTime,
  1525.                 null,   // erogazioneSoggetto, Come da codice console.
  1526.                 erogazioneRuolo,    //, non viene utilizzato.
  1527.                 evalnull( () -> Enums.tipoAutenticazioneFromRest.get(authn.getTipo()).toString() ),     // erogazioneAutenticazione
  1528.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null ) ),                   // erogazioneAutenticazioneOpzionale
  1529.                 autenticazionePrincipal, // erogazioneAutenticazionePrincipal
  1530.                 autenticazioneParametroList, // erogazioneAutenticazioneParametroList
  1531.                 statoAutorizzazione,                        // erogazioneAutorizzazione QUESTO E' lo STATO dell'autorizzazione
  1532.                 ServletUtils.boolToCheckBoxStatus( isRichiedente ),             // erogazioneAutorizzazioneAutenticati,
  1533.                 ServletUtils.boolToCheckBoxStatus( isRuoli ),               // erogazioneAutorizzazioneRuoli,
  1534.                 Enums.ruoloTipologiaFromRest.get(ruoliFonte).toString(),                // erogazioneAutorizzazioneRuoliTipologia,
  1535.                 ruoliRichiesti!=null ? ruoliRichiesti.toString() : null,    // erogazioneAutorizzazioneRuoliMatch,  AllAnyEnum == RuoloTipoMatch
  1536.                 env.isSupportatoAutenticazioneSoggetti,
  1537.                 generaPortaApplicativa,                                                 // generaPACheckSoggetto (Un'erogazione genera una porta applicativa)
  1538.                 listExtendedConnettore,
  1539.                 null,                                                                   // fruizioneServizioApplicativo
  1540.                 null,                                                                   // Ruolo fruizione, non viene utilizzato.
  1541.                 evalnull( () -> Enums.tipoAutenticazioneFromRest.get(authn.getTipo()).toString() ),  // fruizioneAutenticazione
  1542.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null ) ),           // fruizioneAutenticazioneOpzionale
  1543.                 autenticazionePrincipal, // fruizioneAutenticazionePrincipal
  1544.                 autenticazioneParametroList, // fruizioneAutenticazioneParametroList
  1545.                 statoAutorizzazione,                                            // fruizioneAutorizzazione  
  1546.                 ServletUtils.boolToCheckBoxStatus( isRichiedente ),                 // fruizioneAutorizzazioneAutenticati,
  1547.                 ServletUtils.boolToCheckBoxStatus( isRuoli ),                   // fruizioneAutorizzazioneRuoli,
  1548.                 Enums.ruoloTipologiaFromRest.get(ruoliFonte).toString(),                    // fruizioneAutorizzazioneRuoliTipologia,
  1549.                 ruoliRichiesti!=null ? ruoliRichiesti.toString() : null,        // fruizioneAutorizzazioneRuoliMatch,
  1550.                 env.tipo_protocollo,
  1551.                 xamlPolicy,                                                                 //allegatoXacmlPolicy,
  1552.                 "",
  1553.                 evalnull( () -> fruitore.get().getTipo() ),     // tipoFruitore
  1554.                 evalnull( () -> fruitore.get().getNome() ),         // nomeFruitore
  1555.                 autenticazioneToken,
  1556.                 tokenPolicy,
  1557.                
  1558.                 apiKey ? org.openspcoop2.web.lib.mvc.Costanti.CHECK_BOX_ENABLED : org.openspcoop2.web.lib.mvc.Costanti.CHECK_BOX_DISABLED, // autenticazioneApiKey
  1559.                 apiKey &&
  1560.                     env.erogazioniHelper.isAutenticazioneApiKeyUseOAS3Names(
  1561.                             httpApiKey!=null ? evalnull(httpApiKey::getApiKeyHeader) : null,
  1562.                             httpApiKey!=null ? evalnull(httpApiKey::getAppIdHeader) : null
  1563.                 ), // useOAS3Names
  1564.                 apiKey &&
  1565.                     env.erogazioniHelper.isAutenticazioneApiKeyUseAppId(
  1566.                             httpApiKey!=null ? evalnull(httpApiKey::getAppId) : null
  1567.                 ), // useAppId
  1568.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKeyHeader ) : null, // apiKeyHeader
  1569.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKey ) : null, // apiKeyValue
  1570.                 httpApiKey!=null ? evalnull( httpApiKey::getAppIdHeader ) : null, // appIdHeader
  1571.                 httpApiKey!=null ? evalnull( httpApiKey::getAppId ) : null, // appIdValue  
  1572.                
  1573.                 false, // erogazioneServizioApplicativoServerEnabled,
  1574.                 null, // rogazioneServizioApplicativoServer
  1575.                 canaleStato, canale, gestioneCanaliEnabled
  1576.             )) {
  1577.             throw FaultCode.RICHIESTA_NON_VALIDA.toException( StringEscapeUtils.unescapeHtml( env.pd.getMessage()) );
  1578.         }
  1579.        
  1580.        
  1581.        
  1582.     }


  1583.    
  1584.     public static final org.openspcoop2.core.registry.Connettore buildConnettoreRegistro(final ErogazioniEnv env, final BaseConnettoreHttp conn) throws Exception {
  1585.         final org.openspcoop2.core.registry.Connettore regConnettore = new org.openspcoop2.core.registry.Connettore();
  1586.         fillConnettoreRegistro(regConnettore, env, conn, "");
  1587.         return regConnettore;
  1588.     }

  1589.    
  1590.     public static final void fillConnettoreRegistro(
  1591.             final org.openspcoop2.core.registry.Connettore regConnettore,
  1592.             final ErogazioniEnv env,
  1593.             final BaseConnettoreHttp conn,
  1594.             final String oldConnT
  1595.             ) throws Exception {
  1596.        
  1597.        
  1598.         final boolean proxy_enabled = conn.getProxy() != null;
  1599.         final boolean tempiRisposta_enabled = conn.getTempiRisposta() != null;
  1600.        
  1601.         final ConnettoreConfigurazioneApiKey httpApiKey = conn.getAutenticazioneApikey();
  1602.         final ConnettoreConfigurazioneHttps httpsConf    = conn.getAutenticazioneHttps();
  1603.         final ConnettoreConfigurazioneHttpBasic httpConf     = conn.getAutenticazioneHttp();

  1604.         final String endpointtype = httpsConf != null ? TipiConnettore.HTTPS.getNome() : TipiConnettore.HTTP.getNome();
  1605.        
  1606.         final Properties parametersPOST = null;
  1607.         org.openspcoop2.core.registry.Connettore conTmp = null;
  1608.         List<ExtendedConnettore> listExtendedConnettore =
  1609.                 ServletExtendedConnettoreUtils.getExtendedConnettore(conTmp, ConnettoreServletType.ACCORDO_SERVIZIO_PARTE_SPECIFICA_ADD, env.apsHelper,
  1610.                             parametersPOST, false, endpointtype);

  1611.         final ConnettoreConfigurazioneHttpsClient httpsClient = httpsConf!=null ? evalnull( httpsConf::getClient ) : null;
  1612.         final ConnettoreConfigurazioneHttpsServer httpsServer = httpsConf!=null ? evalnull( httpsConf::getServer ) : null;
  1613.         final ConnettoreConfigurazioneProxy       proxy       = conn.getProxy();
  1614.         final ConnettoreConfigurazioneTimeout     timeoutConf = conn.getTempiRisposta();
  1615.         final String tokenPolicy = conn.getTokenPolicy();
  1616.        
  1617.         final boolean httpsstato = httpsClient != null; // Questo è per l'autenticazione client.
  1618.          
  1619.         String httpskeystore = ErogazioniCheckNotNull.getHttpskeystore(httpsClient);
  1620.                        
  1621.          
  1622.         env.apsHelper.fillConnettore(
  1623.                 regConnettore,
  1624.                 conn.isDebug() != null && conn.isDebug() ? "true" : "false",                // this.connettoreDebug,
  1625.                 endpointtype,           // endpointtype
  1626.                 oldConnT,                       // oldConnT
  1627.                 "",                     // tipoConn Personalizzato
  1628.                 conn.getEndpoint(),     // this.url,
  1629.                 null,   // this.nome,
  1630.                 null,   // this.tipo,
  1631.                 httpConf!=null ? evalnull( httpConf::getUsername ) : null,
  1632.                 httpConf!=null ? evalnull( httpConf::getPassword ) : null,
  1633.                 null,   // this.initcont,
  1634.                 null,   // this.urlpgk,
  1635.                 conn.getEndpoint(), // this.url,
  1636.                 null,   // this.connfact,
  1637.                 null,   // this.sendas,
  1638.                 conn.getEndpoint(),                                                     // this.httpsurl,
  1639.                 evalnull( () -> httpsConf.getTipologia().toString() ),              // this.httpstipologia
  1640.                 BaseHelper.evalorElse( () -> httpsConf.isHostnameVerifier().booleanValue(), false ),    // this.httpshostverify,
  1641.                 (httpsConf!=null ? !httpsConf.isTrustAllServerCerts() : ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS), // httpsTrustVerifyCert
  1642.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePath ) : null,              // this.httpspath
  1643.                 evalnull( () -> ConnettoreHTTPApiHelper.getTruststoreType(httpsServer) ),   // this.httpstipo,
  1644.                 httpsServer!=null ? evalnull( httpsServer::getTruststorePassword ) : null,          // this.httpspwd,
  1645.                 httpsServer!=null ? evalnull( httpsServer::getAlgoritmo ) : null,                   // this.httpsalgoritmo
  1646.                 httpsstato,
  1647.                 httpskeystore,          // this.httpskeystore,
  1648.                 "",                                                                 //  this.httpspwdprivatekeytrust
  1649.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePath ) : null,                // pathkey
  1650.                 evalnull( () -> ConnettoreHTTPApiHelper.getKeystoreType(httpsClient) ),         // this.httpstipokey
  1651.                 httpsClient!=null ? evalnull( httpsClient::getKeystorePassword ) : null,            // this.httpspwdkey
  1652.                 httpsClient!=null ? evalnull( httpsClient::getKeyPassword ) : null,             // this.httpspwdprivatekey,  
  1653.                 httpsClient!=null ? evalnull( httpsClient::getAlgoritmo ) : null,               // this.httpsalgoritmokey,
  1654.                 httpsClient!=null ? evalnull( httpsClient::getKeyAlias ) : null,                    // httpsKeyAlias
  1655.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreCrl ) : null,                   // httpsTrustStoreCRLs
  1656.                 httpsServer!=null ? evalnull( httpsServer::getTruststoreOcspPolicy) : null,             // httpsTrustStoreOCSPPolicy
  1657.                 httpsClient!=null ? evalnull( httpsClient::getKeystoreByokPolicy) : null,               // httpsKeyStoreBYOKPolicy
  1658.            
  1659.                 ServletUtils.boolToCheckBoxStatus( proxy_enabled ),
  1660.                 proxy!=null ? evalnull( proxy::getHostname ) : null,
  1661.                 evalnull( () -> proxy.getPorta().toString() ),
  1662.                 proxy!=null ? evalnull( proxy::getUsername ) : null,
  1663.                 proxy!=null ? evalnull( proxy::getPassword ) : null,
  1664.                
  1665.                 ServletUtils.boolToCheckBoxStatus( tempiRisposta_enabled ),
  1666.                 evalnull( () -> timeoutConf.getConnectionTimeout().toString()), // this.tempiRisposta_connectionTimeout,
  1667.                 evalnull( () -> timeoutConf.getConnectionReadTimeout().toString()), //null, // this.tempiRisposta_readTimeout,
  1668.                 evalnull( () -> timeoutConf.getTempoMedioRisposta().toString()),    // this.tempiRisposta_tempoMedioRisposta,
  1669.                 "no",   // this.opzioniAvanzate,
  1670.                 "",     // this.transfer_mode,
  1671.                 "",     // this.transfer_mode_chunk_size,
  1672.                 "",     // this.redirect_mode,
  1673.                 "",     // this.redirect_max_hop,
  1674.                 null,   // this.requestOutputFileName,
  1675.                 null,   // this.requestOutputFileName_permissions,
  1676.                 null,   // this.requestOutputFileNameHeaders,
  1677.                 null,   // this.requestOutputFileNameHeaders_permissions,
  1678.                 null,   // this.requestOutputParentDirCreateIfNotExists,
  1679.                 null,   // this.requestOutputOverwriteIfExists,
  1680.                 null,   // this.responseInputMode,
  1681.                 null,   // this.responseInputFileName,
  1682.                 null,   // this.responseInputFileNameHeaders,
  1683.                 null,   // this.responseInputDeleteAfterRead,
  1684.                 null,   // this.responseInputWaitTime,
  1685.                 tokenPolicy,
  1686.                
  1687.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKeyHeader ) : null,
  1688.                 httpApiKey!=null ? evalnull( httpApiKey::getApiKey ) : null,
  1689.                 httpApiKey!=null ? evalnull( httpApiKey::getAppIdHeader ) : null,
  1690.                 httpApiKey!=null ? evalnull( httpApiKey::getAppId ): null,
  1691.                
  1692.                 null, // connettoreStatusParams
  1693.                 listExtendedConnettore);            
  1694.     }
  1695.    
  1696.     public static final void createAps(
  1697.             ErogazioniEnv env,
  1698.             AccordoServizioParteSpecifica asps,
  1699.             org.openspcoop2.core.registry.Connettore regConnettore,
  1700.             APIImpl impl,
  1701.             boolean alreadyExists,
  1702.             boolean generaPortaApplicativa) throws Exception
  1703.     {
  1704.         final boolean generaPortaDelegata = !generaPortaApplicativa;
  1705.        
  1706.         // defaults
  1707.         if (impl.getAutenticazione() == null) {
  1708.             APIImplAutenticazioneHttps https = new APIImplAutenticazioneHttps();
  1709.             https.setTipo(TipoAutenticazioneEnum.HTTPS);
  1710.             https.setOpzionale(false);
  1711.             impl.setAutenticazione(https);
  1712.         }
  1713.        
  1714.         final OneOfAPIImplAutorizzazione authz = impl.getAutorizzazione();
  1715.         final OneOfAPIImplAutenticazione authn = impl.getAutenticazione();
  1716.        
  1717.         AccordoServizioParteComuneSintetico as = null;
  1718.         if(asps!=null) {
  1719.             as = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  1720.         }

  1721.         FonteEnum ruoliFonte = FonteEnum.QUALSIASI;
  1722.        
  1723.         boolean isRichiedente = false;
  1724.         boolean isRuoli = false;
  1725.         String statoAutorizzazione = AutorizzazioneUtilities.STATO_DISABILITATO;
  1726.         String soggettoAutenticato = null;
  1727.         AllAnyEnum ruoliRichiesti = null;
  1728.         String ruolo = null;
  1729.        
  1730.         TipoAutenticazionePrincipal autenticazionePrincipal = null;
  1731.         List<String> autenticazioneParametroList = null;
  1732.         if(authn!=null) {
  1733.             autenticazionePrincipal = getTipoAutenticazionePrincipal(authn);
  1734.             autenticazioneParametroList = getAutenticazioneParametroList(env, authn.getTipo(), authn);
  1735.         }
  1736.         final org.openspcoop2.utils.BooleanNullable autenticazioneOpzionaleNullable = getAutenticazioneOpzionale(authn); // gestisce authn se null
  1737.                
  1738.         if ( evalnull( () -> authz.getTipo() ) != null) {
  1739.             switch (authz.getTipo()) {
  1740.             case ABILITATO:
  1741.                
  1742.                 if(authz instanceof APIImplAutorizzazioneAbilitataNew) {
  1743.                    
  1744.                     APIImplAutorizzazioneAbilitataNew authzAbilitata = (APIImplAutorizzazioneAbilitataNew) authz;
  1745.                    
  1746.                     if(authzAbilitata.getRuoliFonte()!=null) {
  1747.                         ruoliFonte = authzAbilitata.getRuoliFonte();
  1748.                     }
  1749.                     isRichiedente = authzAbilitata.isRichiedente();
  1750.                     isRuoli = authzAbilitata.isRuoli();
  1751.                     statoAutorizzazione = AutorizzazioneUtilities.STATO_ABILITATO;
  1752.                     if ( authzAbilitata.getSoggetto() != null )
  1753.                         soggettoAutenticato = new IDSoggetto(env.tipo_soggetto, authzAbilitata.getSoggetto()).toString();
  1754.                     ruoliRichiesti = authzAbilitata.getRuoliRichiesti();
  1755.                     ruolo = authzAbilitata.getRuolo();
  1756.                 }
  1757.                 else {
  1758.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  1759.                 }
  1760.                
  1761.                 break;
  1762.             case XACML_POLICY:
  1763.                
  1764.                 if(authz instanceof APIImplAutorizzazioneXACML) {
  1765.                    
  1766.                     APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  1767.                
  1768.                     if (authzXacml.getPolicy() == null) {
  1769.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Campo obbligatorio 'policy' non presente nell'autorizzazione indicata");
  1770.                     }
  1771.                     if(authzXacml.getRuoliFonte()!=null) {
  1772.                         ruoliFonte = authzXacml.getRuoliFonte();
  1773.                     }
  1774.                     statoAutorizzazione = AutorizzazioneUtilities.STATO_XACML_POLICY;
  1775.                 }
  1776.                 else {
  1777.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  1778.                 }
  1779.                 break;
  1780.             case DISABILITATO:
  1781.                 statoAutorizzazione = AutorizzazioneUtilities.STATO_DISABILITATO;
  1782.                 break;
  1783.             case CUSTOM:
  1784.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo di autorizzazione '"+authz.getTipo()+"' non utilizzabile");
  1785.             }
  1786.         }
  1787.        
  1788.        
  1789.        
  1790.         IDServizio idServizio = null;
  1791.         if(asps!=null) {
  1792.             idServizio = env.idServizioFactory.getIDServizioFromValues(asps.getTipo(), asps.getNome(), new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore()), asps.getVersione());
  1793.         }
  1794.                    
  1795.         BinaryParameter xamlPolicy = new BinaryParameter();
  1796.         if(authz instanceof APIImplAutorizzazioneXACML) {
  1797.             APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  1798.             xamlPolicy.setValue(authzXacml.getPolicy());
  1799.         }
  1800.         xamlPolicy.setName(CostantiControlStation.PARAMETRO_DOCUMENTO_SICUREZZA_XACML_POLICY);
  1801.              
  1802.         boolean gestioneCanaliEnabled = env.gestioneCanali;
  1803.         String canale = null;
  1804.         if(gestioneCanaliEnabled) {
  1805.             if(impl instanceof Erogazione) {
  1806.                 canale = ((Erogazione)impl).getCanale();
  1807.             }
  1808.             else if(impl instanceof Fruizione) {
  1809.                 canale = ((Fruizione)impl).getCanale();
  1810.             }
  1811.             if(canale!=null) {
  1812.                 if(!env.canali.contains(canale)) {
  1813.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + canale + "' non è presente nel registro");
  1814.                 }
  1815.             }
  1816.         }
  1817.         String canaleStato = null;
  1818.         if(canale == null) {
  1819.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
  1820.         } else {
  1821.             canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
  1822.         }

  1823.        
  1824.         ProtocolProperties p = null;
  1825.         if(generaPortaApplicativa) {
  1826.             p = getProtocolProperties(asps, env);
  1827.         } else {
  1828.             IDFruizione idFruizione = new IDFruizione();
  1829.            
  1830.             IDServizio idAps = new IDServizio();

  1831.             if(asps!=null) {
  1832.                 idAps.setUriAccordoServizioParteComune(asps.getAccordoServizioParteComune());
  1833.                 idAps.setPortType(asps.getPortType());
  1834.             }

  1835.             idFruizione.setIdServizio(idAps);
  1836.             IDSoggetto idFruitore = new IDSoggetto(env.idSoggetto.getTipo(), env.idSoggetto.getNome());
  1837.             idFruizione.setIdFruitore(idFruitore);

  1838.             Fruitore fruitore = getFruitore(asps, env.idSoggetto.getNome());
  1839.             if(fruitore==null) {
  1840.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il fruitore '" + env.idSoggetto.getNome() + "' non risulta definito");
  1841.             }
  1842.             p = getProtocolProperties(idFruizione, fruitore, env);
  1843.         }
  1844.        
  1845.         AccordiServizioParteSpecificaUtilities.create(
  1846.                 asps,
  1847.                 alreadyExists,
  1848.                 idServizio,                                         // idServizio,
  1849.                 env.idSoggetto.toIDSoggetto(),                      // idFruitore,
  1850.                 env.tipo_protocollo,                                // this.tipoProtocollo,
  1851.                 env.apcCore.toMessageServiceBinding(as.getServiceBinding()),
  1852.                 env.idSoggetto.getId(),                             // Questo è l'id del soggetto a cui associare la porta delegata\applicativa
  1853.                 regConnettore,
  1854.                 generaPortaApplicativa,                                     // generaPortaApplicativa,
  1855.                 generaPortaDelegata,                                        // generaPortaDelegata
  1856.                 evalnull( () -> Enums.tipoAutenticazioneFromRest.get(authn.getTipo()).toString() ),                                         // erogazioneAutenticazione
  1857.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null ) ),                                                       // erogazioneAutenticazioneOpzionale
  1858.                 autenticazionePrincipal, // erogazioneAutenticazionePrincipal
  1859.                 autenticazioneParametroList, // erogazioneAutenticazioneParametroList
  1860.                 statoAutorizzazione,    // autorizzazione, è lo STATO  
  1861.                 ServletUtils.boolToCheckBoxStatus( isRichiedente ),         //  autorizzazioneAutenticati,
  1862.                 ServletUtils.boolToCheckBoxStatus( isRuoli ),               //  autorizzazioneRuoli,
  1863.                 Enums.ruoloTipologiaFromRest.get(ruoliFonte).toString(),                //  erogazioneAutorizzazioneRuoliTipologia
  1864.                 ruoliRichiesti!=null ? ruoliRichiesti.toString() : null,            //  autorizzazioneRuoliMatch
  1865.                 null,   // servizioApplicativo Come da Debug,
  1866.                 ruolo,  // ruolo: E' il ruolo scelto nella label "Ruolo"
  1867.                 soggettoAutenticato,    // soggettoAutenticato TODO BISOGNA AGGIUNGERE IL CONTROLLO CHE IL SOGGETTO AUTENTICATO SIA NEL REGISTRO
  1868.                 null,   //  autorizzazioneAutenticatiToken,
  1869.                 null,   //  autorizzazioneRuoliToken,
  1870.                 null,   //  autorizzazioneRuoliTipologiaToken,
  1871.                 null,   //  autorizzazioneRuoliMatchToken,
  1872.                 null,   // autorizzazione_tokenOptions,
  1873.                 null,   // autorizzazioneScope,
  1874.                 null,   // scope,
  1875.                 null,   // autorizzazioneScopeMatch,
  1876.                 xamlPolicy, // allegatoXacmlPolicy,
  1877.                 StatoFunzionalita.DISABILITATO.toString(),  // gestioneToken
  1878.                 null,   // gestioneTokenPolicy,
  1879.                 null,   // gestioneTokenOpzionale,
  1880.                 null,   // gestioneTokenValidazioneInput,
  1881.                 null,   // gestioneTokenIntrospection,
  1882.                 null,   // gestioneTokenUserInfo,
  1883.                 null,   // gestioneTokenTokenForward,
  1884.                 null,   // autenticazioneTokenIssuer,
  1885.                 null,   // autenticazioneTokenClientId,
  1886.                 null,   // autenticazioneTokenSubject,
  1887.                 null,   // autenticazioneTokenUsername,
  1888.                 null,   // autenticazioneTokenEMail,
  1889.                 p,
  1890.                 ConsoleOperationType.ADD,
  1891.                 env.apsCore,
  1892.                 env.erogazioniHelper,
  1893.                 null, // nomeSAServer TODO quando si aggiunge applicativo server
  1894.                 canaleStato, canale, gestioneCanaliEnabled,
  1895.                 null, // identificazioneAttributiStato,
  1896.                 null, //String [] attributeAuthoritySelezionate
  1897.                 null // attributeAuthorityAttributi
  1898.             );

  1899.        
  1900.     }
  1901.    
  1902.     public static Fruitore getFruitore(AccordoServizioParteSpecifica asps, String nome) {
  1903.        
  1904.         if(asps!=null && asps.getFruitoreList()!=null) {
  1905.             for(Fruitore f: asps.getFruitoreList()) {
  1906.                 if(f.getNome().equals(nome)) {
  1907.                     return f;
  1908.                 }
  1909.             }
  1910.         }
  1911.         return null;
  1912.     }

  1913.     /*public static final AccordoServizioParteSpecifica getServizio(String tipo, String nome, Integer versione, IDSoggetto idErogatore, ErogazioniEnv env) throws DriverRegistroServiziException, DriverRegistroServiziNotFound {
  1914.        
  1915.        
  1916.         return getServizio(nome, versione, tipo, idErogatore, env);
  1917.     }*/
  1918.    
  1919.    
  1920.     public static final AccordoServizioParteSpecifica getServizio(String tipo, String nome, Integer versione, IDSoggetto idErogatore, ErogazioniEnv env) throws DriverRegistroServiziException, DriverRegistroServiziNotFound {
  1921.        
  1922.         if ( tipo == null ) {
  1923.             tipo = env.protocolFactoryMgr._getServiceTypes().get(env.tipo_protocollo).get(0);
  1924.         }      
  1925.         final IDServizio idAps = env.idServizioFactory.getIDServizioFromValues(tipo, nome, idErogatore, versione);
  1926.        
  1927.         return env.apsCore.getServizio(idAps, true);
  1928.     }
  1929.    
  1930.    
  1931.     public static final boolean isErogazione(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws DriverConfigurazioneException, DriverRegistroServiziException {
  1932.         List<IDPortaApplicativa> pApplicative = env.paCore.getIDPorteApplicativeAssociate(env.idServizioFactory.getIDServizioFromAccordo(asps));
  1933.         return pApplicative != null && !pApplicative.isEmpty();
  1934.     }
  1935.    
  1936.     public static final boolean isFruizione(AccordoServizioParteSpecifica asps, IDSoggetto idFruitore, ErogazioniEnv env) throws DriverConfigurazioneException, DriverRegistroServiziException {
  1937.         List<IDPortaDelegata> pDelegate = env.pdCore.getIDPorteDelegateAssociate(env.idServizioFactory.getIDServizioFromAccordo(asps), idFruitore);
  1938.         return pDelegate != null && !pDelegate.isEmpty();
  1939.     }
  1940.    
  1941.    
  1942.    
  1943.    
  1944.    
  1945.     public static final AccordoServizioParteSpecifica getServizioIfErogazione(String tipo, String nome, Integer versione, IDSoggetto idErogatore, ErogazioniEnv env) throws DriverRegistroServiziException, DriverRegistroServiziNotFound {
  1946.        
  1947.         final AccordoServizioParteSpecifica ret = getServizio(tipo, nome, versione, idErogatore, env);
  1948.        
  1949.         try {
  1950.             if (!isErogazione(ret,env)) {
  1951.                 return null;
  1952.             }
  1953.         } catch (Exception e) {
  1954.             return null;
  1955.         }
  1956.        
  1957.         return ret;
  1958.     }
  1959.    
  1960.    
  1961.     public static final AccordoServizioParteSpecifica getServizioIfFruizione(String tipo, String nome, Integer versione, IDSoggetto idErogatore, IDSoggetto idFruitore, ErogazioniEnv env) throws DriverRegistroServiziException, DriverRegistroServiziNotFound {
  1962.        
  1963.         final AccordoServizioParteSpecifica ret = getServizio(tipo, nome, versione, idErogatore, env);
  1964.        
  1965.         try {
  1966.             if (!isFruizione(ret,idFruitore,env))
  1967.                 return null;
  1968.         } catch (Exception e) {
  1969.             return null;
  1970.         }
  1971.        
  1972.         return ret;
  1973.     }
  1974.    
  1975. //  public static final AllegatoGenerico deserializeAllegatoGenerico(Object o) {
  1976. //      AllegatoGenerico ret = deserializeDefault(o, AllegatoGenerico.class);
  1977. //      if (StringUtils.isEmpty(ret.getNome()) || ret.getDocumento() == null) {
  1978. //          throw FaultCode.RICHIESTA_NON_VALIDA.toException(AllegatoGenerico.class.getName() + ": Indicare i campi obbligatori 'nome' e 'documento'");
  1979. //      }
  1980. //      return ret;
  1981. //  }
  1982. //  
  1983. //  public static final AllegatoSpecificaSemiformale deserializeAllegatoSpecificaSemiformale(Object o) {
  1984. //      AllegatoSpecificaSemiformale ret = deserializeDefault(o, AllegatoSpecificaSemiformale.class);
  1985. //      if (StringUtils.isEmpty(ret.getNome()) || ret.getDocumento() == null || ret.getTipo() == null) {
  1986. //          throw FaultCode.RICHIESTA_NON_VALIDA.toException(AllegatoSpecificaSemiformale.class.getName() + ": Indicare i campi obbligatori 'nome', 'documento' e 'tipo'");
  1987. //      }
  1988. //      return ret;
  1989. //  }
  1990.    
  1991.    
  1992.        
  1993.     public static final Documento implAllegatoToDocumento(ApiImplAllegato body, AccordoServizioParteSpecifica asps) throws InstantiationException, IllegalAccessException {
  1994.        
  1995.         Documento documento = new Documento();
  1996.         documento.setIdProprietarioDocumento(asps.getId());
  1997.        
  1998.         RuoloAllegatoAPIImpl ruoloAllegato = body.getAllegato().getRuolo();
  1999.        
  2000.         documento.setRuolo(RuoliDocumento.valueOf(
  2001.                 Enums.ruoliDocumentoFromApiImpl
  2002.                 .get( ruoloAllegato).toString() )
  2003.                 .toString()
  2004.             );
  2005.        
  2006.         switch (ruoloAllegato) {
  2007.         case ALLEGATO:
  2008.            
  2009.             if(! (body.getAllegato() instanceof ApiImplAllegatoGenerico)) {
  2010.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  2011.             }
  2012.             ApiImplAllegatoGenerico allegatoGenerico = (ApiImplAllegatoGenerico) body.getAllegato();
  2013.             documento.setFile(allegatoGenerico.getNome());
  2014.             documento.setByteContenuto(allegatoGenerico.getDocumento());
  2015.             documento.setTipo( evalnull( () -> allegatoGenerico.getNome().substring( allegatoGenerico.getNome().lastIndexOf('.')+1, allegatoGenerico.getNome().length())) );
  2016.             break;

  2017.         case SPECIFICASEMIFORMALE:
  2018.            
  2019.             if(! (body.getAllegato() instanceof ApiImplAllegatoSpecificaSemiformale)) {
  2020.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  2021.             }
  2022.             ApiImplAllegatoSpecificaSemiformale allegatoSS = (ApiImplAllegatoSpecificaSemiformale) body.getAllegato();
  2023.             documento.setFile(allegatoSS.getNome());
  2024.             documento.setByteContenuto(allegatoSS.getDocumento());
  2025.             if(ErogazioniCheckNotNull.isNotNullTipoSpecifica(allegatoSS, documento)) {
  2026.                 TipoSpecificaSemiformaleEnum tipoAllegato = (TipoSpecificaSemiformaleEnum) allegatoSS.getTipoSpecifica();
  2027.                 documento.setTipo( evalnull( () -> Enums.tipoDocumentoSemiFormaleFromSpecifica.get(tipoAllegato) ).toString() );
  2028.             }
  2029.             break;
  2030.            
  2031.         case SPECIFICALIVELLOSERVIZIO:
  2032.            
  2033.             if(! (body.getAllegato() instanceof ApiImplAllegatoSpecificaLivelloServizio)) {
  2034.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  2035.             }
  2036.             ApiImplAllegatoSpecificaLivelloServizio allegatoLS = (ApiImplAllegatoSpecificaLivelloServizio) body.getAllegato();
  2037.             documento.setFile(allegatoLS.getNome());
  2038.             documento.setByteContenuto(allegatoLS.getDocumento());
  2039.             if(ErogazioniCheckNotNull.isNotNullTipoSpecifica(allegatoLS, documento)) {
  2040.                 TipoSpecificaLivelloServizioEnum tipoAllegato = (TipoSpecificaLivelloServizioEnum) allegatoLS.getTipoSpecifica();
  2041.                 documento.setTipo( evalnull( () -> Enums.tipoDocumentoLivelloServizioFromSpecifica.get(tipoAllegato).toString()) );
  2042.             }
  2043.             break;
  2044.            
  2045.         case SPECIFICASICUREZZA:
  2046.            
  2047.             if(! (body.getAllegato() instanceof ApiImplAllegatoSpecificaSicurezza)) {
  2048.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'allegato fornito possiede una struttura dati '"+body.getAllegato().getClass().getName()+"' non compatibile con il ruolo '"+ruoloAllegato+"'");
  2049.             }
  2050.             ApiImplAllegatoSpecificaSicurezza allegatoSSec = (ApiImplAllegatoSpecificaSicurezza) body.getAllegato();
  2051.             documento.setFile(allegatoSSec.getNome());
  2052.             documento.setByteContenuto(allegatoSSec.getDocumento());
  2053.             if(ErogazioniCheckNotNull.isNotNullTipoSpecifica(allegatoSSec, documento)) {
  2054.                 TipoSpecificaSicurezzaEnum tipoAllegato = (TipoSpecificaSicurezzaEnum) allegatoSSec.getTipoSpecifica();
  2055.                 documento.setTipo( evalnull( () -> Enums.tipoDocumentoSicurezzaFromSpecifica.get(tipoAllegato).toString()) );
  2056.             }
  2057.             break;
  2058.         }

  2059.         return documento;
  2060.     }
  2061.    
  2062.    
  2063.     public static final ApiImplAllegato documentoToImplAllegato(Documento doc) {
  2064.         ApiImplAllegato ret = new ApiImplAllegato();
  2065.        
  2066.         RuoloAllegatoAPIImpl ruoloAllegato = Enums.ruoliApiImplFromDocumento.get( RuoliDocumento.valueOf(doc.getRuolo()));
  2067.        
  2068.         switch (ruoloAllegato) {
  2069.         case ALLEGATO: {
  2070.            
  2071.             ApiImplAllegatoGenerico allegatoGenerico = new ApiImplAllegatoGenerico();
  2072.             allegatoGenerico.setRuolo(ruoloAllegato);
  2073.             allegatoGenerico.setDocumento(doc.getByteContenuto());
  2074.             allegatoGenerico.setNome(doc.getFile());
  2075.             ret.setAllegato(allegatoGenerico);
  2076.             break;
  2077.         }
  2078.        
  2079.         case SPECIFICASEMIFORMALE: {
  2080.            
  2081.             ApiImplAllegatoSpecificaSemiformale allegatoSS = new ApiImplAllegatoSpecificaSemiformale();
  2082.             allegatoSS.setRuolo(ruoloAllegato);
  2083.             allegatoSS.setDocumento(doc.getByteContenuto());
  2084.             allegatoSS.setNome(doc.getFile());
  2085.             TipiDocumentoSemiformale tipo = TipiDocumentoSemiformale.toEnumConstant(doc.getTipo());
  2086.             allegatoSS.setTipoSpecifica((Helper.apiEnumToGovway(tipo, TipoSpecificaSemiformaleEnum.class)));
  2087.             ret.setAllegato(allegatoSS);
  2088.             break;
  2089.         }
  2090.            
  2091.         case SPECIFICALIVELLOSERVIZIO:{
  2092.            
  2093.             ApiImplAllegatoSpecificaLivelloServizio allegatoSL = new ApiImplAllegatoSpecificaLivelloServizio();
  2094.             allegatoSL.setRuolo(ruoloAllegato);
  2095.             allegatoSL.setDocumento(doc.getByteContenuto());
  2096.             allegatoSL.setNome(doc.getFile());
  2097.             TipiDocumentoLivelloServizio tipo = TipiDocumentoLivelloServizio.toEnumConstant(doc.getTipo());
  2098.             allegatoSL.setTipoSpecifica((Helper.apiEnumToGovway(tipo, TipoSpecificaLivelloServizioEnum.class)));
  2099.             ErogazioniCheckNotNull.documentoToImplAllegato(allegatoSL, tipo);
  2100.             ret.setAllegato(allegatoSL);
  2101.             break;
  2102.         }
  2103.        
  2104.         case SPECIFICASICUREZZA:{
  2105.            
  2106.             ApiImplAllegatoSpecificaSicurezza allegatoSSec = new ApiImplAllegatoSpecificaSicurezza();
  2107.             allegatoSSec.setRuolo(ruoloAllegato);
  2108.             allegatoSSec.setDocumento(doc.getByteContenuto());
  2109.             allegatoSSec.setNome(doc.getFile());
  2110.             TipiDocumentoSicurezza tipo = TipiDocumentoSicurezza.toEnumConstant(doc.getTipo());
  2111.             allegatoSSec.setTipoSpecifica((Helper.apiEnumToGovway(tipo, TipoSpecificaSicurezzaEnum.class)));
  2112.             ErogazioniCheckNotNull.documentoToImplAllegato(allegatoSSec, tipo);
  2113.             ret.setAllegato(allegatoSSec);
  2114.             break;
  2115.         }
  2116.        
  2117.         }
  2118.        
  2119.         return ret;
  2120.        
  2121.     }
  2122.    
  2123.     public static final ApiImplAllegatoItem ImplAllegatoToItem(ApiImplAllegato allegato) {
  2124.         ApiImplAllegatoItem ret = new ApiImplAllegatoItem();
  2125.        
  2126.         RuoloAllegatoAPIImpl ruoloAllegato = allegato.getAllegato().getRuolo();
  2127.        
  2128.         switch (ruoloAllegato) {
  2129.         case ALLEGATO: {
  2130.            
  2131.             ApiImplAllegatoGenerico allegatoGenerico = (ApiImplAllegatoGenerico) allegato.getAllegato();
  2132.            
  2133.             ApiImplAllegatoItemGenerico allegatoGenericoItem = new ApiImplAllegatoItemGenerico();
  2134.             allegatoGenericoItem.setRuolo(ruoloAllegato);
  2135.             allegatoGenericoItem.setNome(allegatoGenerico.getNome());
  2136.             ret.setAllegato(allegatoGenericoItem);
  2137.             break;
  2138.         }
  2139.        
  2140.         case SPECIFICASEMIFORMALE: {
  2141.            
  2142.             ApiImplAllegatoSpecificaSemiformale allegatoSS = (ApiImplAllegatoSpecificaSemiformale) allegato.getAllegato();
  2143.            
  2144.             ApiImplAllegatoItemSpecificaSemiformale allegatoItemSS = new ApiImplAllegatoItemSpecificaSemiformale();
  2145.             allegatoItemSS.setRuolo(ruoloAllegato);
  2146.             allegatoItemSS.setNome(allegatoSS.getNome());
  2147.             allegatoItemSS.setTipoSpecifica(allegatoSS.getTipoSpecifica());
  2148.             ret.setAllegato(allegatoItemSS);
  2149.             break;
  2150.         }
  2151.            
  2152.         case SPECIFICALIVELLOSERVIZIO:{
  2153.            
  2154.             ApiImplAllegatoSpecificaLivelloServizio allegatoSL = (ApiImplAllegatoSpecificaLivelloServizio) allegato.getAllegato();
  2155.            
  2156.             ApiImplAllegatoItemSpecificaLivelloServizio allegatoItemSL = new ApiImplAllegatoItemSpecificaLivelloServizio();
  2157.             allegatoItemSL.setRuolo(ruoloAllegato);
  2158.             allegatoItemSL.setNome(allegatoSL.getNome());
  2159.             allegatoItemSL.setTipoSpecifica(allegatoSL.getTipoSpecifica());
  2160.             ret.setAllegato(allegatoItemSL);
  2161.             break;
  2162.         }
  2163.        
  2164.         case SPECIFICASICUREZZA:{
  2165.            
  2166.             ApiImplAllegatoSpecificaSicurezza allegatoSSec = (ApiImplAllegatoSpecificaSicurezza) allegato.getAllegato();
  2167.            
  2168.             ApiImplAllegatoItemSpecificaSicurezza allegatoItemSSec = new ApiImplAllegatoItemSpecificaSicurezza();
  2169.             allegatoItemSSec.setRuolo(ruoloAllegato);
  2170.             allegatoItemSSec.setNome(allegatoSSec.getNome());
  2171.             allegatoItemSSec.setTipoSpecifica(allegatoSSec.getTipoSpecifica());
  2172.             ret.setAllegato(allegatoItemSSec);
  2173.             break;
  2174.         }
  2175.        
  2176.         }

  2177.         return ret;
  2178.        
  2179.     }
  2180.    
  2181.     public static void createAllegatoAsps(ApiImplAllegato body, final ErogazioniEnv env,
  2182.             AccordoServizioParteSpecifica asps)
  2183.                     throws Exception {

  2184.         Documento documento = ErogazioniApiHelper.implAllegatoToDocumento(body, asps);
  2185.        
  2186.         SerialiableFormFile filewrap = new SerialiableFormFile(documento.getFile(), documento.getByteContenuto());
  2187.         env.requestWrapper.overrideParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_RUOLO, documento.getRuolo());            

  2188.         boolean documentoUnivocoIndipendentementeTipo = true;
  2189.         if (env.archiviCore.existsDocumento(documento,ProprietariDocumento.servizio,documentoUnivocoIndipendentementeTipo)) {
  2190.             throw FaultCode.CONFLITTO.toException("Allegato con nome " + documento.getFile() + " già presente per l'erogazione");
  2191.         }
  2192.        
  2193.         if (!env.apsHelper.serviziAllegatiCheckData(TipoOperazione.ADD,filewrap,documento,env.protocolFactory)) {
  2194.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  2195.         }
  2196.        
  2197.         switch (body.getAllegato().getRuolo()) {
  2198.             case ALLEGATO:
  2199.                 asps.addAllegato(documento);
  2200.                 break;
  2201.             case SPECIFICASEMIFORMALE:
  2202.                 asps.addSpecificaSemiformale(documento);
  2203.                 break;
  2204.             case SPECIFICASICUREZZA:
  2205.                 asps.addSpecificaSicurezza(documento);
  2206.                 break;
  2207.             case SPECIFICALIVELLOSERVIZIO:
  2208.                 asps.addSpecificaLivelloServizio(documento);
  2209.                 break;
  2210.         }

  2211.         env.apsCore.performUpdateOperation(env.userLogin, false, asps);
  2212.     }
  2213.    
  2214.     public static final Optional<Documento> getDocumento(List<Documento> list, String name) {
  2215.         return list.stream().filter(d -> d.getFile().equals(name)).findFirst();
  2216.        
  2217.     }
  2218.    
  2219.     public static final Optional<Long> getIdDocumento(List<Documento> list, String name) {
  2220.         return list.stream().filter(d -> d.getFile().equals(name)).findFirst().map( d -> d.getId());
  2221.     }
  2222.    
  2223.     public static final <T> Stream<T> mergeStreams(Stream<T>[] streams) {
  2224.         Stream<T> tmp = streams[0];
  2225.        
  2226.         for(int i = 1; i< streams.length; i++) {
  2227.             tmp = Stream.concat(tmp, streams[i]);
  2228.         }
  2229.        
  2230.         return tmp;
  2231.     }
  2232.    
  2233.     public static final Optional<Long> getIdDocumento(String nomeAllegato, final AccordoServizioParteSpecifica asps) {
  2234.         Optional<Long> idDoc = ErogazioniApiHelper.getIdDocumento(asps.getSpecificaSemiformaleList(), nomeAllegato);
  2235.        
  2236.         if (!idDoc.isPresent()) idDoc = getIdDocumento(asps.getSpecificaLivelloServizioList(), nomeAllegato);
  2237.         if (!idDoc.isPresent()) idDoc = getIdDocumento(asps.getAllegatoList(), nomeAllegato);
  2238.         if (!idDoc.isPresent()) idDoc = getIdDocumento(asps.getSpecificaSicurezzaList(), nomeAllegato);
  2239.         return idDoc;
  2240.     }
  2241.    
  2242.    
  2243.     public static void updateAllegatoAsps(ApiImplAllegato body, String nomeAllegato, ErogazioniEnv env, AccordoServizioParteSpecifica asps)
  2244.             throws Exception {
  2245.         Documento oldDoc = BaseHelper.supplyOrNotFound( () -> env.archiviCore.getDocumento(nomeAllegato, null, null, asps.getId(), false, ProprietariDocumento.servizio), "Allegato di nome " + nomeAllegato);
  2246.        
  2247.         Documento newDoc = ErogazioniApiHelper.implAllegatoToDocumento(body, asps);
  2248.         newDoc.setId(oldDoc.getId());
  2249.         newDoc.setOraRegistrazione(new Date());
  2250.        
  2251.         if (! StringUtils.equals(newDoc.getRuolo(), oldDoc.getRuolo())) {
  2252.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non puoi modificare il ruolo di un allegato");
  2253.         }

  2254.         SerialiableFormFile filewrap = new SerialiableFormFile(newDoc.getFile(), newDoc.getByteContenuto());
  2255.         env.requestWrapper.overrideParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_RUOLO, newDoc.getRuolo());
  2256.        
  2257.         if (!env.apsHelper.serviziAllegatiCheckData(TipoOperazione.CHANGE,filewrap,newDoc,env.protocolFactory)) {
  2258.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  2259.         }
  2260.        
  2261.         AccordiServizioParteSpecificaUtilities.sostituisciDocumentoAsps(asps, oldDoc, newDoc);


  2262.         env.apsCore.performUpdateOperation(env.userLogin, false, asps);
  2263.     }
  2264.    
  2265.     public static final void updateInformazioniGenerali(ApiImplInformazioniGenerali body, ErogazioniEnv env, AccordoServizioParteSpecifica asps, boolean isErogazione) throws Exception{

  2266.         AccordoServizioParteComuneSintetico as = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());

  2267.         ServiceBinding tipoApi = as.getServiceBinding();
  2268.        
  2269.         IDServizio oldIDServizioForUpdate = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2270.         asps.setOldIDServizioForUpdate(oldIDServizioForUpdate);
  2271.        
  2272.         asps.setNome(body.getNome());
  2273.         if (!StringUtils.isEmpty(body.getTipo())) {
  2274.             asps.setTipo(body.getTipo());
  2275.         }
  2276.        
  2277.         if (tipoApi == ServiceBinding.SOAP && !StringUtils.isEmpty(body.getApiSoapServizio())) {
  2278.             asps.setPortType(body.getApiSoapServizio());
  2279.         }
  2280.        
  2281.         serviziUpdateCheckData(as, asps, isErogazione, env);
  2282.                        
  2283.         List<Object> oggettiDaAggiornare = AccordiServizioParteSpecificaUtilities.getOggettiDaAggiornare(asps, env.apsCore);
  2284.        
  2285.         // eseguo l'aggiornamento
  2286.         env.apsCore.performUpdateOperation(env.userLogin, false, oggettiDaAggiornare.toArray());
  2287.     }
  2288.    
  2289.     public static final void overrideFruizioneUrlInvocazione(final HttpRequestWrapper wrap, final IDSoggetto idErogatore,
  2290.             final IDServizio idServizio, final PortaDelegata pd, final PortaDelegataAzione pdAzione, boolean setPattern, long idAzione) {
  2291.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID, pd.getId().toString());
  2292.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_NOME_PORTA, pd.getNome());            
  2293.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_SOGGETTO, pd.getIdSoggetto().toString());  
  2294.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_AZIONE, setPattern ? pdAzione.getPattern() : pdAzione.getNome());         // Azione è il contenuto del campo pattern o del campo nome, che vengono settati nel campo pattern.
  2295.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_AZIONE_ID, null);                     // Come da debug
  2296.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_MODE_AZIONE, pdAzione.getIdentificazione().toString() );
  2297.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_XSD, null);
  2298.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_INTEGRAZIONE, "");
  2299.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_SOGGETTO_ID, idErogatore.toString()); // Questo è il nome (uri) del soggetto erogatore
  2300.         wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_SERVIZIO_ID, idServizio.toString());
  2301.         if(idAzione>0) {
  2302.             wrap.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_AZIONE_ID, idAzione+"");
  2303.         }
  2304.     }
  2305.    
  2306.     public static final void fillApiImplViewItemWithErogazione(final ErogazioniEnv env, final AccordoServizioParteSpecifica asps, final ApiImplViewItem toFill) {
  2307.         try {
  2308.             IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2309.             AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2310.        
  2311.             List<MappingErogazionePortaApplicativa> listaMappingErogazionePortaApplicativa = env.apsCore.mappingServiziPorteAppList(idServizio,asps.getId(), null);
  2312.             List<PortaApplicativa> listaPorteApplicativeAssociate = new ArrayList<>();

  2313.             String nomePortaDefault = null;
  2314.             for(MappingErogazionePortaApplicativa mappinErogazione : listaMappingErogazionePortaApplicativa) {
  2315.                 if(mappinErogazione.isDefault()) {
  2316.                     nomePortaDefault = mappinErogazione.getIdPortaApplicativa().getNome();
  2317.                 }
  2318.                 listaPorteApplicativeAssociate.add(env.paCore.getPortaApplicativa(mappinErogazione.getIdPortaApplicativa()));
  2319.             }
  2320.            
  2321.             IDPortaApplicativa idPAdefault = new IDPortaApplicativa();
  2322.             idPAdefault.setNome(nomePortaDefault);
  2323.             PortaApplicativa paDefault = env.paCore.getPortaApplicativa(idPAdefault);

  2324.             int numeroAbilitate = 0;
  2325.             int numeroConfigurazioni = listaMappingErogazionePortaApplicativa.size();
  2326.             int numeroConfigurazioniSchedulingDisabilitato = -1;
  2327.             boolean allActionRedefined = false;
  2328.                        
  2329.             if(listaMappingErogazionePortaApplicativa.size()>1) {
  2330.                 List<String> azioniL = new ArrayList<>();
  2331.                 Map<String,String> azioni = env.paCore.getAzioniConLabel(asps, apc, false, true, new ArrayList<>());
  2332.                 if(azioni != null && azioni.size() > 0)
  2333.                     azioniL.addAll(azioni.keySet());
  2334.                 allActionRedefined = env.erogazioniHelper.allActionsRedefinedMappingErogazione(azioniL, listaMappingErogazionePortaApplicativa);
  2335.             }

  2336.             boolean isRidefinito = false;
  2337.             for (PortaApplicativa paAssociata : listaPorteApplicativeAssociate) {
  2338.                 boolean statoPA = paAssociata.getStato().equals(StatoFunzionalita.ABILITATO);
  2339.                 if(statoPA) {
  2340.                     if(!allActionRedefined || !paAssociata.getNome().equals(nomePortaDefault)) {
  2341.                         numeroAbilitate ++;
  2342.                     }
  2343.                 }
  2344.                
  2345.                 if(allActionRedefined && paAssociata.getNome().equals(nomePortaDefault)) {
  2346.                     // se tutte le azioni sono state ridefinite non devo controllare la porta di default
  2347.                     continue;
  2348.                 }

  2349.                 if(!paAssociata.getNome().equals(nomePortaDefault) && env.apsHelper.isConnettoreRidefinito(paDefault, paDefault.getServizioApplicativoList().get(0), paAssociata,
  2350.                         paAssociata.getServizioApplicativoList().get(0), paAssociata.getServizioApplicativoList())) {
  2351.                     isRidefinito = true;
  2352.                 }
  2353.                
  2354.                 if(paAssociata.getBehaviour()!=null && paAssociata.sizeServizioApplicativoList()>0) {
  2355.                     for (PortaApplicativaServizioApplicativo paSA : paAssociata.getServizioApplicativoList()) {
  2356.                         if(paSA!=null && paSA.getDatiConnettore()!=null &&
  2357.                                 StatoFunzionalita.DISABILITATO.equals(paSA.getDatiConnettore().getScheduling())) {
  2358.                             numeroConfigurazioniSchedulingDisabilitato++;
  2359.                         }
  2360.                     }
  2361.                 }
  2362.             }
  2363.            
  2364.             StatoDescrizione stato = getStatoDescrizione(numeroAbilitate, allActionRedefined, numeroConfigurazioni, numeroConfigurazioniSchedulingDisabilitato );
  2365.            
  2366.             ApiCanale canale = ErogazioniApiHelper.toApiCanale(env, paDefault, apc, false);
  2367.            
  2368.             String urlConnettore = ConnettoreAPIHelper.getUrlConnettore(getServizioApplicativoErogazione(idServizio, env.saCore, env.paCore, env.paHelper), isRidefinito);
  2369.             fillApiImplViewItemWithAsps(
  2370.                     env,
  2371.                     asps,
  2372.                     toFill,
  2373.                     getUrlInvocazioneErogazione(asps, env),
  2374.                     urlConnettore,
  2375.                     getGestioneCorsFromErogazione(asps, env),
  2376.                     idServizio.getSoggettoErogatore().getNome(),
  2377.                     stato.stato,
  2378.                     stato.descrizione,
  2379.                     canale
  2380.                 );
  2381.            
  2382.         } catch (Exception e) {
  2383.             throw new RuntimeException(e);
  2384.         }
  2385.            
  2386.     }
  2387.    
  2388.     public static final StatoDescrizione getStatoDescrizione(int numeroAbilitate, boolean allActionRedefined, int numeroConfigurazioni, int numeroConfigurazioniSchedulingDisabilitato ) {
  2389.         String stato_descrizione;
  2390.         StatoApiEnum statoApi;
  2391.        
  2392.         StatoDescrizione ret = new StatoDescrizione();
  2393.        
  2394.         if(numeroAbilitate == 0) {
  2395.             statoApi = StatoApiEnum.ERROR;
  2396.             stato_descrizione = ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_DISABILITATE_TOOLTIP;
  2397.         } else if(
  2398.                 (!allActionRedefined && numeroAbilitate == numeroConfigurazioni)
  2399.                 ||
  2400.                 (allActionRedefined && numeroAbilitate == (numeroConfigurazioni-1)) // escludo la regola che non viene usata poiche' tutte le azioni sono ridefinite
  2401.                 ) {
  2402.             if(numeroConfigurazioniSchedulingDisabilitato>0) {
  2403.                 statoApi = StatoApiEnum.WARN;
  2404.                 stato_descrizione = ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_CONNETTORI_MULTIPLI_SCHEDULING_DISABILITATO_TOOLTIP;
  2405.             }
  2406.             else {
  2407.                 statoApi = StatoApiEnum.OK;
  2408.                 stato_descrizione = ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_ABILITATE_TOOLTIP;
  2409.             }
  2410.         } else  {
  2411.             statoApi = StatoApiEnum.WARN;
  2412.             stato_descrizione = ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_PARZIALMENTE_ABILITATE_TOOLTIP;
  2413.         }
  2414.        
  2415.         ret.stato = statoApi;
  2416.         ret.descrizione = stato_descrizione;
  2417.        
  2418.         return ret;
  2419.     }
  2420.    
  2421.    
  2422.     public static final void fillApiImplViewItemWithFruizione(final ErogazioniEnv env, final AccordoServizioParteSpecifica asps, final IdSoggetto fruitore, final ApiImplViewItem toFill) throws Exception {
  2423.        
  2424.         IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2425.         AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2426.        
  2427.         long idFruizione = env.apsCore.getIdFruizioneAccordoServizioParteSpecifica(fruitore.toIDSoggetto(), idServizio);
  2428.         List<MappingFruizionePortaDelegata> listaMappingFruzionePortaDelegata = env.apsCore.serviziFruitoriMappingList(idFruizione, fruitore.toIDSoggetto(), idServizio, null);
  2429.         List<PortaDelegata> listaPorteDelegateAssociate = new ArrayList<>();

  2430.         String nomePortaDefault = null;
  2431.         boolean isRidefinito = false;

  2432.         for(MappingFruizionePortaDelegata mappingFruizione : listaMappingFruzionePortaDelegata) {
  2433.             if(mappingFruizione.isDefault()) {
  2434.                 nomePortaDefault = mappingFruizione.getIdPortaDelegata().getNome();
  2435.             } else {
  2436.                
  2437.                 PortaDelegata pd = env.pdCore.getPortaDelegata(mappingFruizione.getIdPortaDelegata());

  2438.                 List<String> listaAzioniPDAssociataMappingNonDefault = pd.getAzione().getAzioneDelegataList();
  2439.                 String azioneConnettore =  null;
  2440.                 if(listaAzioniPDAssociataMappingNonDefault!=null && listaAzioniPDAssociataMappingNonDefault.size()>0) {
  2441.                     azioneConnettore = listaAzioniPDAssociataMappingNonDefault.get(0);
  2442.                 }

  2443.                 Optional<Fruitore> fruit = BaseHelper.findFirst(asps.getFruitoreList(),
  2444.                         f -> f.getTipo().equals(mappingFruizione.getIdFruitore().getTipo()) && f.getNome().equals(mappingFruizione.getIdFruitore().getNome()));

  2445.                 if(fruit.isPresent()) {
  2446.                     if(azioneConnettore!=null && !"".equals(azioneConnettore)) {
  2447.                         for (ConfigurazioneServizioAzione check : fruit.get().getConfigurazioneAzioneList()) {
  2448.                             if(check.getAzioneList().contains(azioneConnettore)) {
  2449.                                 isRidefinito = true;
  2450.                             }
  2451.                         }
  2452.                     }
  2453.                 }
  2454.             }
  2455.             listaPorteDelegateAssociate.add(env.pdCore.getPortaDelegata(mappingFruizione.getIdPortaDelegata()));
  2456.         }
  2457.        
  2458.         int numeroAbilitate = 0;
  2459.         int numeroConfigurazioni = listaMappingFruzionePortaDelegata.size();
  2460.         boolean allActionRedefined = false;
  2461.          
  2462.         if(listaMappingFruzionePortaDelegata.size()>1) {
  2463.             List<String> azioniL = new ArrayList<>();
  2464.             Map<String,String> azioni = env.pdCore.getAzioniConLabel(asps, apc, false, true, new ArrayList<>());
  2465.             if(azioni != null && azioni.size() > 0)
  2466.                 azioniL.addAll(azioni.keySet());
  2467.             allActionRedefined = env.erogazioniHelper.allActionsRedefinedMappingFruizione(azioniL, listaMappingFruzionePortaDelegata);
  2468.         }
  2469.        
  2470.         for (PortaDelegata pdAssociata : listaPorteDelegateAssociate) {
  2471.             boolean statoPD = pdAssociata.getStato().equals(StatoFunzionalita.ABILITATO);
  2472.             if(statoPD) {
  2473.                 if(!allActionRedefined || !pdAssociata.getNome().equals(nomePortaDefault)) {
  2474.                     numeroAbilitate ++;
  2475.                 }
  2476.             }
  2477.            
  2478.             if(allActionRedefined && pdAssociata.getNome().equals(nomePortaDefault)) {
  2479.                 // se tutte le azioni sono state ridefinite non devo controllare la porta di default
  2480.                 continue;
  2481.             }
  2482.            
  2483.             // aggiungere qua eventuali altri check
  2484.         }
  2485.        
  2486.         StatoDescrizione stato = getStatoDescrizione(numeroAbilitate, allActionRedefined, numeroConfigurazioni, -1);        
  2487.        
  2488.         IDPortaDelegata idPDdefault = new IDPortaDelegata();
  2489.         idPDdefault.setNome(nomePortaDefault);
  2490.         PortaDelegata pdDefault = env.pdCore.getPortaDelegata(idPDdefault);
  2491.         ApiCanale canale = ErogazioniApiHelper.toApiCanale(env, pdDefault, apc, false);
  2492.        
  2493.         try {
  2494.             String connettore = ConnettoreAPIHelper.getUrlConnettore(evalnull( () -> getConnettoreFruizione(asps, fruitore, env)), isRidefinito);
  2495.             fillApiImplViewItemWithAsps(
  2496.                     env,
  2497.                     asps,
  2498.                     toFill,
  2499.                     getUrlInvocazioneFruizione(asps, fruitore.toIDSoggetto(), env),
  2500.                     connettore,
  2501.                     getGestioneCorsFromFruizione(asps, fruitore.toIDSoggetto(), env),
  2502.                     fruitore.getNome(),
  2503.                     stato.stato,
  2504.                     stato.descrizione,
  2505.                     canale
  2506.                 );
  2507.         } catch (Exception e) {
  2508.             throw new RuntimeException(e);
  2509.         }
  2510.        
  2511.     }
  2512.    
  2513.    
  2514.     public static final void fillApiImplViewItemWithAsps(
  2515.             final ErogazioniEnv env,
  2516.             final AccordoServizioParteSpecifica asps,
  2517.             final ApiImplViewItem toFill,
  2518.             final String urlInvocazione,
  2519.             final String urlConnettore,
  2520.             final CorsConfigurazione gestioneCors,
  2521.             final String nomeSoggetto,
  2522.             final StatoApiEnum stato,
  2523.             final String statoDescrizione,
  2524.             final ApiCanale canale) {

  2525.         try {
  2526.             final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2527.             final AccordoServizioParteComuneSintetico aspc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2528.            
  2529.             toFill.setTipoServizio(idServizio.getTipo());
  2530.             toFill.setNome(asps.getNome());
  2531.             toFill.setVersione(asps.getVersione());
  2532.             toFill.setSoggetto(nomeSoggetto);   // Questo nelle fruizioni è il fruitore, nelle erogazioni è l'erogatore
  2533.             toFill.setApiNome(aspc.getNome());
  2534.             toFill.setApiTipo(TipoApiEnum.valueOf(aspc.getServiceBinding().name()));
  2535.             toFill.setApiVersione(aspc.getVersione());
  2536.             toFill.setProfilo(env.profilo);
  2537.             toFill.setConnettore(urlConnettore);        
  2538.             toFill.setApiSoapServizio(asps.getPortType());
  2539.             toFill.setGestioneCors(Helper.boolToStatoFunzionalita(gestioneCors != null).toString());
  2540.             toFill.setUrlInvocazione(urlInvocazione);
  2541.            
  2542.             if(aspc.getGruppo()!=null && !aspc.getGruppo().isEmpty()) {
  2543.                 toFill.setApiTags(new ArrayList<>());
  2544.                 for (GruppoSintetico tag : aspc.getGruppo()) {
  2545.                     toFill.addApiTagsItem(tag.getNome());
  2546.                 }
  2547.             }
  2548.            
  2549.             /*if(numeroAbilitate == 0) {
  2550.                 de.setValue(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_DISABILITATE);
  2551.                 de.setToolTip(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_DISABILITATE_TOOLTIP);
  2552.             } else if(
  2553.                     (!allActionRedefined && numeroAbilitate == numeroConfigurazioni)
  2554.                     ||
  2555.                     (allActionRedefined && numeroAbilitate == (numeroConfigurazioni-1)) // escludo la regola che non viene usata poiche' tutte le azioni sono ridefinite
  2556.                     ) {
  2557.                 de.setValue(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_ABILITATE);
  2558.                 de.setToolTip(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_TUTTE_ABILITATE_TOOLTIP);
  2559.             } else  {
  2560.                 de.setValue(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_PARZIALMENTE_ABILITATE);
  2561.                 de.setToolTip(ErogazioniCostanti.ASPS_EROGAZIONI_ICONA_STATO_CONFIGURAZIONI_PARZIALMENTE_ABILITATE_TOOLTIP);
  2562.             }*/
  2563.            
  2564.             toFill.setStato(stato);
  2565.             toFill.setStatoDescrizione(statoDescrizione);
  2566.             toFill.setCanale(canale);

  2567.         } catch (Exception e) {
  2568.             throw new RuntimeException(e);
  2569.         }      
  2570.     }
  2571.    
  2572.    
  2573.     public static final ErogazioneViewItem aspsToErogazioneViewItem(final ErogazioniEnv env, final AccordoServizioParteSpecifica asps) {
  2574.         ErogazioneViewItem ret = new ErogazioneViewItem();
  2575.         fillApiImplViewItemWithErogazione(env, asps, ret);
  2576.         return ret;
  2577.     }
  2578.    
  2579.    
  2580.     public static final FruizioneViewItem aspsToFruizioneViewItem(final ErogazioniEnv env, final AccordoServizioParteSpecifica asps, final IdSoggetto fruitore) {

  2581.         FruizioneViewItem ret = new FruizioneViewItem();
  2582.         try {
  2583.             fillApiImplViewItemWithFruizione(env, asps, fruitore, ret);
  2584.            
  2585.             final IDSoggetto idErogatore = env.idServizioFactory.getIDServizioFromAccordo(asps).getSoggettoErogatore();
  2586.             ret.setErogatore(idErogatore.getNome());
  2587.         } catch (Exception e) {
  2588.             throw new RuntimeException(e);
  2589.         }
  2590.        
  2591.         return ret;
  2592.     }
  2593.    
  2594.    
  2595.     public static final void fillApiImplItemFromView(ApiImplViewItem impl, ApiImplItem toFill) {
  2596.         toFill.setApiNome(impl.getApiNome());
  2597.         toFill.setApiSoapServizio(impl.getApiSoapServizio());
  2598.         toFill.setApiTipo(impl.getApiTipo());
  2599.         toFill.setApiVersione(impl.getApiVersione());
  2600.         toFill.setNome(impl.getNome());
  2601.         toFill.setProfilo(impl.getProfilo());
  2602.         toFill.setSoggetto(impl.getSoggetto());
  2603.         toFill.setStato(impl.getStato());
  2604.         toFill.setStatoDescrizione(impl.getStatoDescrizione());
  2605.         toFill.setTipoServizio(impl.getTipoServizio());
  2606.         toFill.setVersione(impl.getVersione());
  2607.         toFill.setApiTags(impl.getApiTags());
  2608.         toFill.setCanale(impl.getCanale());
  2609.     }
  2610.    
  2611.    
  2612.     public static final FruizioneItem fruizioneViewItemToFruizioneItem(FruizioneViewItem fru) {
  2613.         FruizioneItem ret = new FruizioneItem();
  2614.         fillApiImplItemFromView(fru, ret);
  2615.         ret.setErogatore(fru.getErogatore());
  2616.         return ret;
  2617.     }
  2618.    
  2619.    
  2620.     public static final ErogazioneItem erogazioneViewItemToErogazioneItem(ErogazioneViewItem ero) {
  2621.         ErogazioneItem ret = new ErogazioneItem();
  2622.         fillApiImplItemFromView(ero, ret);
  2623.        
  2624.         return ret;    
  2625.     }
  2626.    
  2627.    
  2628.    
  2629.     public static final void deleteAllegato(String nomeAllegato, final ErogazioniEnv env, final AccordoServizioParteSpecifica asps)
  2630.             throws Exception {
  2631.         final Optional<Long> idDoc = ErogazioniApiHelper.getIdDocumento(nomeAllegato, asps);
  2632.        
  2633.         if ( env.delete_404 && !idDoc.isPresent() ) {
  2634.             throw FaultCode.NOT_FOUND.toException("Allegato di nome " + nomeAllegato + " non presente.");
  2635.         }
  2636.        
  2637.         if (idDoc.isPresent()) {
  2638.             AccordiServizioParteSpecificaUtilities.deleteAccordoServizioParteSpecificaAllegati(asps, env.userLogin, env.apsCore, env.apsHelper, Arrays.asList(idDoc.get()));
  2639.         }
  2640.     }
  2641.    
  2642.    
  2643.     public static final CorsConfigurazione getGestioneCorsFromErogazione(AccordoServizioParteSpecifica asps, ErogazioniEnv env)
  2644.             throws DriverConfigurazioneException, DriverRegistroServiziException, DriverConfigurazioneNotFound, CoreException  {
  2645.        
  2646.         final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2647.         final IDPortaApplicativa idPA = env.paCore.getIDPortaApplicativaAssociataDefault(idServizio);
  2648.         final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPA);
  2649.        
  2650.         return pa.getGestioneCors();
  2651.     }
  2652.    
  2653.    
  2654.     public static final CorsConfigurazione getGestioneCorsFromFruizione(AccordoServizioParteSpecifica asps, IDSoggetto fruitore, ErogazioniEnv env)
  2655.             throws DriverRegistroServiziException, DriverConfigurazioneException, DriverConfigurazioneNotFound {
  2656.        
  2657.         final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2658.         final IDPortaDelegata idPD = env.pdCore.getIDPortaDelegataAssociataDefault(idServizio, fruitore);
  2659.         final PortaDelegata pd = env.pdCore.getPortaDelegata(idPD);

  2660.         return pd.getGestioneCors();
  2661.     }
  2662.    
  2663.    
  2664.     public static final InvocazioneServizio getInvocazioneServizioErogazione(IDServizio idServizio, ServiziApplicativiCore saCore, PorteApplicativeCore paCore, PorteApplicativeHelper paHelper)
  2665.             throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  2666.    
  2667.         ServizioApplicativo sa = getServizioApplicativoErogazione(idServizio, saCore, paCore, paHelper);
  2668.                        
  2669.         return sa.getInvocazioneServizio();
  2670.     }
  2671.    
  2672.     public static final ServizioApplicativo getServizioApplicativoErogazione(IDServizio idServizio, ServiziApplicativiCore saCore, PorteApplicativeCore paCore, PorteApplicativeHelper paHelper)
  2673.             throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  2674.    
  2675.         final IDPortaApplicativa idPA = paCore.getIDPortaApplicativaAssociataDefault(idServizio);
  2676.         PortaApplicativa pa = paCore.getPortaApplicativa(idPA);
  2677.         String nomeSaDefault = idPA.getNome();
  2678.         if(pa.sizeServizioApplicativoList()>0) {
  2679.             for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
  2680.                 if(paHelper.isConnettoreDefault(pasa)) {
  2681.                     nomeSaDefault = pasa.getNome();
  2682.                     break;
  2683.                 }
  2684.             }
  2685.         }
  2686.         return saCore.getServizioApplicativo(saCore.getIdServizioApplicativo(idServizio.getSoggettoErogatore(), nomeSaDefault));
  2687.     }
  2688.    
  2689.     public static final InvocazioneServizio getInvocazioneServizioErogazioneGruppo(IdServizio idAsps, IDServizio idServizio, ErogazioniEnv env, String gruppo)
  2690.             throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  2691.    
  2692.         final ServizioApplicativo sa = getServizioApplicativo(idAsps, idServizio, env, gruppo);
  2693.         return sa.getInvocazioneServizio();

  2694.     }
  2695.    
  2696.     public static final ServizioApplicativo getServizioApplicativo(IdServizio idAsps, IDServizio idServizio, ErogazioniEnv env, String gruppo)
  2697.             throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  2698.    
  2699.         IDPortaApplicativa idPaDefault = env.paCore.getIDPortaApplicativaAssociataDefault(idServizio);
  2700.         PortaApplicativa paDefault = env.paCore.getPortaApplicativa(idPaDefault);

  2701.         final IDPortaApplicativa idPA = (gruppo!=null) ? BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPA(gruppo, idAsps, env.apsCore), "Gruppo per l'erogazione scelta") : idPaDefault;
  2702.         final PortaApplicativa pa = (gruppo!=null) ? env.paCore.getPortaApplicativa(idPA): paDefault;
  2703.        
  2704.         final ServizioApplicativo sa;
  2705.        
  2706.         boolean isConnettoreRidefinito = false;
  2707.         try {
  2708.             if(gruppo!=null) {
  2709.                 isConnettoreRidefinito = env.apsHelper.isConnettoreRidefinito(paDefault, paDefault.getServizioApplicativoList().get(0), pa,
  2710.                         pa.getServizioApplicativoList().get(0), pa.getServizioApplicativoList());
  2711.             }
  2712.         }catch(Exception e) {
  2713.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2714.         }
  2715.        
  2716.         if(gruppo != null && isConnettoreRidefinito) {
  2717.             sa = env.saCore.getServizioApplicativo(env.saCore.getIdServizioApplicativo(idServizio.getSoggettoErogatore(), pa.getServizioApplicativoList().get(0).getNome()));
  2718.         } else {
  2719.             sa = env.saCore.getServizioApplicativo(env.saCore.getIdServizioApplicativo(idServizio.getSoggettoErogatore(), paDefault.getServizioApplicativoList().get(0).getNome()));
  2720.         }
  2721.        
  2722.         return sa;

  2723.     }
  2724.    
  2725.     public static final org.openspcoop2.core.registry.Connettore getConnettoreFruizione(AccordoServizioParteSpecifica asps, IdSoggetto fruitore, ErogazioniEnv env) {
  2726.        
  2727.         return asps.getFruitoreList().stream()
  2728.             .filter( f -> {
  2729.                 try {
  2730.                     return (new IDSoggetto(f.getTipo(), f.getNome()).equals(fruitore.toIDSoggetto())) && (f.getConnettore() != null);
  2731.                 } catch (CoreException e) {
  2732.                     throw new RuntimeException(e);
  2733.                 }
  2734.             })
  2735.             .map( f -> {
  2736.                 org.openspcoop2.core.registry.Connettore conn = f.getConnettore();
  2737.                 return conn;
  2738.             })
  2739.             .findFirst()
  2740.             .orElse(null);
  2741.                    
  2742.     }
  2743.    
  2744.    
  2745.     public static final String getUrlInvocazioneErogazione(AccordoServizioParteSpecifica asps, ErogazioniEnv env) throws Exception {
  2746.        
  2747.        
  2748.         final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2749.         final IDPortaApplicativa idPA = env.paCore.getIDPortaApplicativaAssociataDefault(idServizio);
  2750.         final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPA);
  2751.         final AccordoServizioParteComuneSintetico aspc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2752.         ConfigurazioneCore confCore = new ConfigurazioneCore(env.stationCore);
  2753.        
  2754.         Configurazione config = confCore.getConfigurazioneGenerale();
  2755.        
  2756.         ConfigurazioneUrlInvocazione configurazioneUrlInvocazione = null;
  2757.         if(config!=null && config.getUrlInvocazione()!=null) {
  2758.             configurazioneUrlInvocazione = config.getUrlInvocazione();
  2759.         }
  2760.        
  2761.         List<String> tags = new ArrayList<>();
  2762.         if(aspc!=null && aspc.getGruppo()!=null && aspc.getGruppo().size()>0) {
  2763.             for (int i = 0; i < aspc.getGruppo().size(); i++) {
  2764.                 tags.add(aspc.getGruppo().get(i).getNome());
  2765.             }
  2766.         }
  2767.        
  2768.         String canaleApi = null;
  2769.         if(aspc!=null) {
  2770.             canaleApi = aspc.getCanale();
  2771.         }
  2772.         String canale = null;
  2773.         if(config!=null) {
  2774.             canale = CanaliUtils.getCanale(config.getGestioneCanali(), canaleApi, pa.getCanale());
  2775.         }
  2776.        
  2777.         org.openspcoop2.message.constants.ServiceBinding sbMessage = org.openspcoop2.message.constants.ServiceBinding.SOAP;
  2778.         if(aspc!=null) {
  2779.             sbMessage = (ServiceBinding.REST.equals(aspc.getServiceBinding())) ? org.openspcoop2.message.constants.ServiceBinding.REST : org.openspcoop2.message.constants.ServiceBinding.SOAP;
  2780.         }
  2781.        
  2782.         UrlInvocazioneAPI urlInvocazioneAPI = UrlInvocazioneAPI.getConfigurazioneUrlInvocazione(configurazioneUrlInvocazione, env.protocolFactory, RuoloContesto.PORTA_APPLICATIVA,
  2783.                 sbMessage,
  2784.                 pa.getNome(), idServizio.getSoggettoErogatore(),
  2785.                 tags, canale);      
  2786.         return urlInvocazioneAPI.getUrl();
  2787.        
  2788.     }
  2789.    
  2790.     public static final String getUrlInvocazioneFruizione(AccordoServizioParteSpecifica asps, IDSoggetto fruitore, ErogazioniEnv env) throws Exception {
  2791.        

  2792.         final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2793.         final IDPortaDelegata idPD = env.pdCore.getIDPortaDelegataAssociataDefault(idServizio, fruitore);
  2794.         final PortaDelegata pd = env.pdCore.getPortaDelegata(idPD);
  2795.         final AccordoServizioParteComuneSintetico aspc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2796.        
  2797.         ConfigurazioneCore confCore = new ConfigurazioneCore(env.stationCore);

  2798.         Configurazione config = confCore.getConfigurazioneGenerale();
  2799.        
  2800.         ConfigurazioneUrlInvocazione configurazioneUrlInvocazione = null;
  2801.         if(config!=null && config.getUrlInvocazione()!=null) {
  2802.             configurazioneUrlInvocazione = config.getUrlInvocazione();
  2803.         }
  2804.        
  2805.         List<String> tags = new ArrayList<>();
  2806.         if(aspc!=null && aspc.getGruppo()!=null && aspc.getGruppo().size()>0) {
  2807.             for (int i = 0; i < aspc.getGruppo().size(); i++) {
  2808.                 tags.add(aspc.getGruppo().get(i).getNome());
  2809.             }
  2810.         }
  2811.        
  2812.         String canaleApi = null;
  2813.         if(aspc!=null) {
  2814.             canaleApi = aspc.getCanale();
  2815.         }
  2816.         String canale = null;
  2817.         if(config!=null) {
  2818.             canale = CanaliUtils.getCanale(config.getGestioneCanali(), canaleApi, pd.getCanale());
  2819.         }
  2820.        
  2821.         org.openspcoop2.message.constants.ServiceBinding sbMessage = org.openspcoop2.message.constants.ServiceBinding.SOAP;
  2822.         if(aspc!=null) {
  2823.             sbMessage = (ServiceBinding.REST.equals(aspc.getServiceBinding())) ? org.openspcoop2.message.constants.ServiceBinding.REST : org.openspcoop2.message.constants.ServiceBinding.SOAP;
  2824.         }
  2825.        
  2826.         UrlInvocazioneAPI urlInvocazioneAPI = UrlInvocazioneAPI.getConfigurazioneUrlInvocazione(configurazioneUrlInvocazione, env.protocolFactory, RuoloContesto.PORTA_DELEGATA,
  2827.                 sbMessage,
  2828.                 pd.getNome(), fruitore,
  2829.                 tags, canale);      
  2830.         return urlInvocazioneAPI.getUrl();
  2831.        
  2832.     }
  2833.    
  2834.     public static final void updateTracciamento(RegistrazioneDiagnosticiConfigurazione body, PortaApplicativa pa, ErogazioniEnv env) throws DriverConfigurazioneNotFound, DriverConfigurazioneException {
  2835.        
  2836.         String tracciamentoStato = null;
  2837.         if(pa.getTracciamento()!=null && pa.getTracciamento().getStato()!=null && StatoFunzionalita.ABILITATO.equals(pa.getTracciamento().getStato())) {
  2838.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2839.         }
  2840.         else {
  2841.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2842.         }
  2843.        
  2844.         String statoDiagnostici = null;
  2845.         String severita = null;
  2846.         if(StatoDefaultRidefinitoEnum.RIDEFINITO.equals(body.getStato())) {
  2847.             statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2848.            
  2849.             if(body.getSeverita()==null) {
  2850.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Severità non indicata.");
  2851.             }
  2852.             switch (body.getSeverita()) {
  2853.             case ALL:
  2854.                 severita = org.openspcoop2.core.config.constants.Severita.ALL.getValue();
  2855.                 break;
  2856.             case DEBUG_HIGH:
  2857.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_HIGH.getValue();
  2858.                 break;
  2859.             case DEBUG_MEDIUM:
  2860.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_MEDIUM.getValue();
  2861.                 break;
  2862.             case DEBUG_LOW:
  2863.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_LOW.getValue();
  2864.                 break;
  2865.             case INFO_PROTOCOL:
  2866.                 severita = org.openspcoop2.core.config.constants.Severita.INFO_PROTOCOL.getValue();
  2867.                 break;
  2868.             case INFO_INTEGRATION:
  2869.                 severita = org.openspcoop2.core.config.constants.Severita.INFO_INTEGRATION.getValue();
  2870.                 break;
  2871.             case ERROR_PROTOCOL:
  2872.                 severita = org.openspcoop2.core.config.constants.Severita.ERROR_PROTOCOL.getValue();
  2873.                 break;
  2874.             case ERROR_INTEGRATION:
  2875.                 severita = org.openspcoop2.core.config.constants.Severita.ERROR_INTEGRATION.getValue();
  2876.                 break;
  2877.             case FATAL:
  2878.                 severita = org.openspcoop2.core.config.constants.Severita.FATAL.getValue();
  2879.                 break;
  2880.             case OFF:
  2881.                 severita = org.openspcoop2.core.config.constants.Severita.OFF.getValue();
  2882.                 break;
  2883.             }
  2884.         }
  2885.         else {
  2886.             statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2887.            
  2888.             if(body.getSeverita()!=null) {
  2889.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Severità non attesa.");
  2890.             }
  2891.         }
  2892.        
  2893.         PorteApplicativeUtilities.initTracciamento(pa, env.paCore, null,
  2894.                 tracciamentoStato, statoDiagnostici, severita);
  2895.     }
  2896.    
  2897.     public static final void updateTracciamento(RegistrazioneDiagnosticiConfigurazione body, PortaDelegata pd, ErogazioniEnv env) throws DriverConfigurazioneNotFound, DriverConfigurazioneException {
  2898.        
  2899.         String tracciamentoStato = null;
  2900.         if(pd.getTracciamento()!=null && pd.getTracciamento().getStato()!=null && StatoFunzionalita.ABILITATO.equals(pd.getTracciamento().getStato())) {
  2901.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2902.         }
  2903.         else {
  2904.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2905.         }
  2906.        
  2907.         String statoDiagnostici = null;
  2908.         String severita = null;
  2909.         if(StatoDefaultRidefinitoEnum.RIDEFINITO.equals(body.getStato())) {
  2910.             statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2911.            
  2912.             if(body.getSeverita()==null) {
  2913.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Severità non indicata.");
  2914.             }
  2915.             switch (body.getSeverita()) {
  2916.             case ALL:
  2917.                 severita = org.openspcoop2.core.config.constants.Severita.ALL.getValue();
  2918.                 break;
  2919.             case DEBUG_HIGH:
  2920.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_HIGH.getValue();
  2921.                 break;
  2922.             case DEBUG_MEDIUM:
  2923.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_MEDIUM.getValue();
  2924.                 break;
  2925.             case DEBUG_LOW:
  2926.                 severita = org.openspcoop2.core.config.constants.Severita.DEBUG_LOW.getValue();
  2927.                 break;
  2928.             case INFO_PROTOCOL:
  2929.                 severita = org.openspcoop2.core.config.constants.Severita.INFO_PROTOCOL.getValue();
  2930.                 break;
  2931.             case INFO_INTEGRATION:
  2932.                 severita = org.openspcoop2.core.config.constants.Severita.INFO_INTEGRATION.getValue();
  2933.                 break;
  2934.             case ERROR_PROTOCOL:
  2935.                 severita = org.openspcoop2.core.config.constants.Severita.ERROR_PROTOCOL.getValue();
  2936.                 break;
  2937.             case ERROR_INTEGRATION:
  2938.                 severita = org.openspcoop2.core.config.constants.Severita.ERROR_INTEGRATION.getValue();
  2939.                 break;
  2940.             case FATAL:
  2941.                 severita = org.openspcoop2.core.config.constants.Severita.FATAL.getValue();
  2942.                 break;
  2943.             case OFF:
  2944.                 severita = org.openspcoop2.core.config.constants.Severita.OFF.getValue();
  2945.                 break;
  2946.             }
  2947.         }
  2948.         else {
  2949.             statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2950.            
  2951.             if(body.getSeverita()!=null) {
  2952.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Severità non attesa.");
  2953.             }
  2954.         }
  2955.        
  2956.         PorteDelegateUtilities.initTracciamento(pd, env.pdCore, null,
  2957.                 tracciamentoStato, statoDiagnostici, severita);
  2958.     }
  2959.    
  2960.     public static final void updateTracciamento(RegistrazioneTransazioniConfigurazione body,
  2961.             Object porta, ErogazioniEnv environment) throws DriverConfigurazioneNotFound, DriverConfigurazioneException, ProtocolException {
  2962.        
  2963.         PortaApplicativa portaApplicativa = null;
  2964.         PortaDelegata portaDelegata = null;
  2965.         boolean applicativa = false;
  2966.         if(porta instanceof PortaApplicativa) {
  2967.             portaApplicativa = (PortaApplicativa) porta;
  2968.             applicativa = true;
  2969.         }
  2970.         else if(porta instanceof PortaDelegata) {
  2971.             portaDelegata = (PortaDelegata) porta;
  2972.         }
  2973.         else {
  2974.             throw new ProtocolException("Oggetto '"+porta.getClass().getName()+"' non supportato");
  2975.         }
  2976.        
  2977.         String statoDiagnostici = null;
  2978.         if(applicativa) {
  2979.             if(portaApplicativa.getTracciamento()!=null && portaApplicativa.getTracciamento().getSeverita()!=null) {
  2980.                 statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2981.             }
  2982.             else {
  2983.                 statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2984.             }
  2985.         }
  2986.         else {
  2987.             if(portaDelegata.getTracciamento()!=null && portaDelegata.getTracciamento().getSeverita()!=null) {
  2988.                 statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  2989.             }
  2990.             else {
  2991.                 statoDiagnostici = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  2992.             }
  2993.         }
  2994.    
  2995.         String severita = null;
  2996.         if(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(statoDiagnostici)) {
  2997.             // prendo quella di default
  2998.             if(applicativa && portaApplicativa.getTracciamento()!=null && portaApplicativa.getTracciamento().getSeverita()!=null) {
  2999.                 severita = portaApplicativa.getTracciamento().getSeverita().getValue();
  3000.             }
  3001.             else if(portaDelegata.getTracciamento()!=null && portaDelegata.getTracciamento().getSeverita()!=null) {
  3002.                 severita = portaDelegata.getTracciamento().getSeverita().getValue();    
  3003.             }
  3004.            
  3005.             if(severita==null) {
  3006.                 Configurazione config = environment.configCore.getConfigurazioneGenerale();
  3007.                 severita = config.getMessaggiDiagnostici()!=null && config.getMessaggiDiagnostici().getSeverita()!=null ?
  3008.                         config.getMessaggiDiagnostici().getSeverita().getValue() :
  3009.                         null;
  3010.             }
  3011.         }
  3012.        
  3013.         String tracciamentoStato = null;
  3014.         boolean ridefinito = false;
  3015.         if(body.getStato()!=null && StatoDefaultRidefinitoEnum.RIDEFINITO.equals(body.getStato())) {
  3016.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  3017.             ridefinito = true;
  3018.         }
  3019.         else {
  3020.             tracciamentoStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  3021.         }
  3022.        
  3023.         if(applicativa) {
  3024.             PorteApplicativeUtilities.initTracciamento(portaApplicativa, environment.paCore, null,
  3025.                     tracciamentoStato, statoDiagnostici, severita);
  3026.         }
  3027.         else {
  3028.             PorteDelegateUtilities.initTracciamento(portaDelegata, environment.pdCore, null,
  3029.                     tracciamentoStato, statoDiagnostici, severita);
  3030.         }
  3031.        
  3032.         String dbStato = null;
  3033.         String dbStatoReqIn = null;
  3034.         String dbStatoReqOut = null;
  3035.         String dbStatoResOut = null;
  3036.         String dbStatoResOutComplete = null;
  3037.         boolean dbFiltroEsiti = false;
  3038.         if(body.getDatabase()!=null) {
  3039.             if(!ridefinito) {
  3040.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Stato tracciamento su db consentito solo con stato ridefinito.");
  3041.             }
  3042.             if(body.getDatabase().getStato()==null) {
  3043.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Stato tracciamento su db non indicato.");
  3044.             }
  3045.             String prefixDB = "Stato tracciamento su db '"+body.getDatabase().getStato()+"'";
  3046.            
  3047.             boolean personalizzato = false;
  3048.             switch (body.getDatabase().getStato()) {
  3049.             case ABILITATO:
  3050.                 dbStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.ABILITATO.getValue();
  3051.                 break;
  3052.             case DISABILITATO:
  3053.                 dbStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.DISABILITATO.getValue();
  3054.                 break;
  3055.             case CONFIGURAZIONEESTERNA:
  3056.                 /**dbStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.CONFIGURAZIONE_ESTERNA.getValue();*/
  3057.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" non valido.");
  3058.             case PERSONALIZZATO:
  3059.                 dbStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.PERSONALIZZATO.getValue();
  3060.                 personalizzato = true;
  3061.                 break;
  3062.             }
  3063.             if(body.getDatabase().getFiltroEsiti()!=null) {
  3064.                 dbFiltroEsiti = TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getDatabase().getFiltroEsiti());
  3065.             }
  3066.             if(body.getDatabase().getFasi()!=null) {
  3067.                 if(personalizzato) {
  3068.                     if(body.getDatabase().getFasi().getRichiestaIngresso()!=null) {
  3069.                         switch (body.getDatabase().getFasi().getRichiestaIngresso()) {
  3070.                         case BLOCCANTE:
  3071.                             dbStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3072.                             break;
  3073.                         case NON_BLOCCANTE:
  3074.                             dbStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3075.                             break;
  3076.                         case DISABILITATO:
  3077.                             dbStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3078.                             break;
  3079.                         }
  3080.                     }
  3081.                     else {
  3082.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" richiede la definizione delle fasi; fase 'richiesta ingresso' non definita");
  3083.                     }
  3084.                    
  3085.                     if(body.getDatabase().getFasi().getRichiestaUscita()!=null) {
  3086.                         switch (body.getDatabase().getFasi().getRichiestaUscita()) {
  3087.                         case BLOCCANTE:
  3088.                             dbStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3089.                             break;
  3090.                         case NON_BLOCCANTE:
  3091.                             dbStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3092.                             break;
  3093.                         case DISABILITATO:
  3094.                             dbStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3095.                             break;
  3096.                         }
  3097.                     }
  3098.                     else {
  3099.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" richiede la definizione delle fasi; fase 'richiesta uscita' non definita");
  3100.                     }
  3101.                    
  3102.                     if(body.getDatabase().getFasi().getRispostaUscita()!=null) {
  3103.                         switch (body.getDatabase().getFasi().getRispostaUscita()) {
  3104.                         case BLOCCANTE:
  3105.                             dbStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3106.                             break;
  3107.                         case NON_BLOCCANTE:
  3108.                             dbStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3109.                             break;
  3110.                         case DISABILITATO:
  3111.                             dbStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3112.                             break;
  3113.                         }
  3114.                     }
  3115.                     else {
  3116.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" richiede la definizione delle fasi; fase 'risposta uscita' non definita");
  3117.                     }
  3118.                    
  3119.                     if(body.getDatabase().getFasi().getRispostaConsegnata()!=null) {
  3120.                         if(TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getDatabase().getFasi().getRispostaConsegnata())) {
  3121.                             dbStatoResOutComplete = org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.getValue();
  3122.                         }else {
  3123.                             dbStatoResOutComplete = org.openspcoop2.core.config.constants.StatoFunzionalita.DISABILITATO.getValue();
  3124.                         }
  3125.                     }
  3126.                     else {
  3127.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" richiede la definizione delle fasi; fase 'risposta consegnata' non definita");
  3128.                     }
  3129.                 }
  3130.                 else {
  3131.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" non prevede la definizione delle fasi.");
  3132.                 }
  3133.             }
  3134.             else {
  3135.                 if(personalizzato) {
  3136.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixDB+" richiede la definizione delle fasi.");
  3137.                 }
  3138.             }
  3139.         }
  3140.        
  3141.         String fsStato = null;
  3142.         String fsStatoReqIn = null;
  3143.         String fsStatoReqOut = null;
  3144.         String fsStatoResOut = null;
  3145.         String fsStatoResOutComplete = null;
  3146.         boolean fsFiltroEsiti = false;
  3147.        
  3148.         String fileTraceStato = null;
  3149.         String fileTraceConfigFile = null;
  3150.         String fileTraceClient = null;
  3151.         String fileTraceClientHdr = null;
  3152.         String fileTraceClientBody = null;
  3153.         String fileTraceServer = null;
  3154.         String fileTraceServerHdr = null;
  3155.         String fileTraceServerBody = null;
  3156.        
  3157.         if(body.getFiletrace()!=null) {
  3158.            
  3159.             if(!ridefinito) {
  3160.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Stato tracciamento su filetrace consentito solo con stato ridefinito.");
  3161.             }
  3162.            
  3163.             if(body.getFiletrace().getStato()==null) {
  3164.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Stato tracciamento su filetrace non indicato.");
  3165.             }
  3166.             String prefixFS =  "Stato tracciamento su filetrace '"+body.getFiletrace().getStato()+"'";
  3167.            
  3168.             boolean abilitataConf = false;
  3169.             boolean personalizzato = false;
  3170.             switch (body.getFiletrace().getStato()) {
  3171.             case ABILITATO:
  3172.                 fsStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.ABILITATO.getValue();
  3173.                 abilitataConf = true;
  3174.                 break;
  3175.             case DISABILITATO:
  3176.                 fsStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.DISABILITATO.getValue();
  3177.                 break;
  3178.             case CONFIGURAZIONEESTERNA:
  3179.                 fsStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.CONFIGURAZIONE_ESTERNA.getValue();
  3180.                 break;
  3181.             case PERSONALIZZATO:
  3182.                 fsStato = org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.PERSONALIZZATO.getValue();
  3183.                 personalizzato = true;
  3184.                 abilitataConf = true;
  3185.                 break;
  3186.             }
  3187.             if(body.getFiletrace().getFiltroEsiti()!=null) {
  3188.                 fsFiltroEsiti = TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getFiletrace().getFiltroEsiti());
  3189.             }
  3190.             if(body.getFiletrace().getFasi()!=null) {
  3191.                 if(personalizzato) {
  3192.                     if(body.getFiletrace().getFasi().getRichiestaIngresso()!=null) {
  3193.                         switch (body.getFiletrace().getFasi().getRichiestaIngresso()) {
  3194.                         case BLOCCANTE:
  3195.                             fsStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3196.                             break;
  3197.                         case NON_BLOCCANTE:
  3198.                             fsStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3199.                             break;
  3200.                         case DISABILITATO:
  3201.                             fsStatoReqIn = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3202.                             break;
  3203.                         }
  3204.                     }
  3205.                     else {
  3206.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" richiede la definizione delle fasi; fase 'richiesta ingresso' non definita");
  3207.                     }
  3208.                    
  3209.                     if(body.getFiletrace().getFasi().getRichiestaUscita()!=null) {
  3210.                         switch (body.getFiletrace().getFasi().getRichiestaUscita()) {
  3211.                         case BLOCCANTE:
  3212.                             fsStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3213.                             break;
  3214.                         case NON_BLOCCANTE:
  3215.                             fsStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3216.                             break;
  3217.                         case DISABILITATO:
  3218.                             fsStatoReqOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3219.                             break;
  3220.                         }
  3221.                     }
  3222.                     else {
  3223.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" richiede la definizione delle fasi; fase 'richiesta uscita' non definita");
  3224.                     }
  3225.                    
  3226.                     if(body.getFiletrace().getFasi().getRispostaUscita()!=null) {
  3227.                         switch (body.getFiletrace().getFasi().getRispostaUscita()) {
  3228.                         case BLOCCANTE:
  3229.                             fsStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.ABILITATO.getValue();
  3230.                             break;
  3231.                         case NON_BLOCCANTE:
  3232.                             fsStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.NON_BLOCCANTE.getValue();
  3233.                             break;
  3234.                         case DISABILITATO:
  3235.                             fsStatoResOut = org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante.DISABILITATO.getValue();
  3236.                             break;
  3237.                         }
  3238.                     }
  3239.                     else {
  3240.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" richiede la definizione delle fasi; fase 'risposta uscita' non definita");
  3241.                     }
  3242.                    
  3243.                     if(body.getFiletrace().getFasi().getRispostaConsegnata()!=null) {
  3244.                         if(TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getFiletrace().getFasi().getRispostaConsegnata())) {
  3245.                             fsStatoResOutComplete = org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.getValue();
  3246.                         }else {
  3247.                             fsStatoResOutComplete = org.openspcoop2.core.config.constants.StatoFunzionalita.DISABILITATO.getValue();
  3248.                         }
  3249.                     }
  3250.                     else {
  3251.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" richiede la definizione delle fasi; fase 'risposta consegnata' non definita");
  3252.                     }
  3253.                 }
  3254.                 else {
  3255.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" non prevede la definizione delle fasi.");
  3256.                 }
  3257.             }
  3258.             else {
  3259.                 if(personalizzato) {
  3260.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" richiede la definizione delle fasi.");
  3261.                 }
  3262.             }
  3263.            
  3264.             if(abilitataConf) {
  3265.                 if(body.getFiletrace().getConfigPath()!=null ||
  3266.                         body.getFiletrace().getDumpClient()!=null ||
  3267.                         body.getFiletrace().getDumpServer()!=null) {
  3268.                     fileTraceStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
  3269.                    
  3270.                     fileTraceConfigFile = body.getFiletrace().getConfigPath();
  3271.                    
  3272.                     if(body.getFiletrace().getDumpClient()!=null) {
  3273.                         fileTraceClient = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3274.                        
  3275.                         if(body.getFiletrace().getDumpClient().isHeaders()!=null && body.getFiletrace().getDumpClient().isHeaders().booleanValue()) {
  3276.                             fileTraceClientHdr = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3277.                         }
  3278.                         else {
  3279.                             fileTraceClientHdr = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3280.                         }
  3281.                        
  3282.                         if(body.getFiletrace().getDumpClient().isPayload()!=null && body.getFiletrace().getDumpClient().isPayload().booleanValue()) {
  3283.                             fileTraceClientBody = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3284.                         }
  3285.                         else {
  3286.                             fileTraceClientBody = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3287.                         }
  3288.                     }
  3289.                     else {
  3290.                         fileTraceClient = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3291.                     }
  3292.                    
  3293.                     if(body.getFiletrace().getDumpServer()!=null) {
  3294.                         fileTraceServer = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3295.                        
  3296.                         if(body.getFiletrace().getDumpServer().isHeaders()!=null && body.getFiletrace().getDumpServer().isHeaders().booleanValue()) {
  3297.                             fileTraceServerHdr = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3298.                         }
  3299.                         else {
  3300.                             fileTraceServerHdr = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3301.                         }
  3302.                        
  3303.                         if(body.getFiletrace().getDumpServer().isPayload()!=null && body.getFiletrace().getDumpServer().isPayload().booleanValue()) {
  3304.                             fileTraceServerBody = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
  3305.                         }
  3306.                         else {
  3307.                             fileTraceServerBody = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3308.                         }
  3309.                     }
  3310.                     else {
  3311.                         fileTraceServer = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
  3312.                     }
  3313.                 }
  3314.                 else {
  3315.                     fileTraceStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  3316.                 }
  3317.             }
  3318.             else {
  3319.                 if(body.getFiletrace().getConfigPath()!=null) {
  3320.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" non consente la definizione del path della configurazione");
  3321.                 }
  3322.                 if(body.getFiletrace().getDumpClient()!=null) {
  3323.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" non consente la definizione del buffer dei messaggi scambiati con il client");
  3324.                 }
  3325.                 if(body.getFiletrace().getDumpServer()!=null) {
  3326.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(prefixFS+" non consente la definizione del buffer dei messaggi scambiati con il server");
  3327.                 }
  3328.                 fileTraceStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  3329.             }
  3330.            
  3331.         }
  3332.        
  3333.        
  3334.         String nuovaConfigurazioneEsiti = null;
  3335.         if(body.getFiltro()!=null && body.getFiltro().getEsiti()!=null && !body.getFiltro().getEsiti().isEmpty()) {
  3336.            
  3337.             if(!ridefinito) {
  3338.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Filtro esiti consentito solo con stato ridefinito.");
  3339.             }
  3340.            
  3341.             Logger log = LoggerWrapperFactory.getLogger(ErogazioniApiHelper.class);
  3342.             EsitiProperties esitiProperties = EsitiProperties.getInstance(log, environment.protocolFactory);
  3343.             List<Integer> esiti = esitiProperties.getEsitiCode();
  3344.             int codeErroreProtocollo = esitiProperties.convertNameToCode(EsitoTransazioneName.ERRORE_PROTOCOLLO.name());
  3345.             int codeFaultPdd = esitiProperties.convertNameToCode(EsitoTransazioneName.ERRORE_SERVER.name());
  3346.             esiti.add(codeErroreProtocollo);
  3347.             esiti.add(codeFaultPdd);
  3348.             StringBuilder sb = new StringBuilder();
  3349.             for (Integer esito : body.getFiltro().getEsiti()) {
  3350.                 if(sb.length()>0) {
  3351.                     sb.append(",");
  3352.                 }
  3353.                 sb.append(esito.intValue());
  3354.                 if(!existsEsito(esito, esiti )) {
  3355.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'esito '"+esito+"' indicato nel filtro non è supportato");  
  3356.                 }
  3357.             }
  3358.             nuovaConfigurazioneEsiti = sb.toString();
  3359.         }
  3360.        
  3361.        
  3362.         String transazioniTempiElaborazione = null;
  3363.         String transazioniToken = null;
  3364.         if(body.getInformazioni()!=null) {
  3365.            
  3366.             if(!ridefinito) {
  3367.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Definizione delle informazioni sulle transazioni consentita solo con stato ridefinito.");
  3368.             }
  3369.            
  3370.             if(body.getInformazioni().getTempiElaborazione()!=null) {
  3371.                 if(TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getInformazioni().getTempiElaborazione())) {
  3372.                     transazioniTempiElaborazione = StatoFunzionalita.ABILITATO.getValue();
  3373.                 }
  3374.                 else {
  3375.                     transazioniTempiElaborazione = StatoFunzionalita.DISABILITATO.getValue();
  3376.                 }
  3377.             }
  3378.             else {
  3379.                 transazioniTempiElaborazione = StatoFunzionalita.DISABILITATO.getValue();
  3380.             }
  3381.            
  3382.             if(body.getInformazioni().getToken()!=null) {
  3383.                 if(TracciamentoTransazioniStatoFase.ABILITATO.equals(body.getInformazioni().getToken())) {
  3384.                     transazioniToken = StatoFunzionalita.ABILITATO.getValue();
  3385.                 }
  3386.                 else {
  3387.                     transazioniToken = StatoFunzionalita.DISABILITATO.getValue();
  3388.                 }
  3389.             }
  3390.             else {
  3391.                 transazioniToken = StatoFunzionalita.DISABILITATO.getValue();
  3392.             }
  3393.         }              
  3394.        

  3395.         if(applicativa) {
  3396.             PorteApplicativeUtilities.setTracciamentoTransazioni(portaApplicativa, environment.paCore,
  3397.                     dbStato,
  3398.                     dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
  3399.                     dbFiltroEsiti,
  3400.                     fsStato,
  3401.                     fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
  3402.                     fsFiltroEsiti,
  3403.                     nuovaConfigurazioneEsiti,
  3404.                     transazioniTempiElaborazione, transazioniToken,
  3405.                     fileTraceStato, fileTraceConfigFile,
  3406.                     fileTraceClient, fileTraceClientHdr, fileTraceClientBody,
  3407.                     fileTraceServer, fileTraceServerHdr, fileTraceServerBody);
  3408.         }
  3409.         else {
  3410.             PorteDelegateUtilities.setTracciamentoTransazioni(portaDelegata, environment.pdCore,
  3411.                     dbStato,
  3412.                     dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
  3413.                     dbFiltroEsiti,
  3414.                     fsStato,
  3415.                     fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
  3416.                     fsFiltroEsiti,
  3417.                     nuovaConfigurazioneEsiti,
  3418.                     transazioniTempiElaborazione, transazioniToken,
  3419.                     fileTraceStato, fileTraceConfigFile,
  3420.                     fileTraceClient, fileTraceClientHdr, fileTraceClientBody,
  3421.                     fileTraceServer, fileTraceServerHdr, fileTraceServerBody);
  3422.         }
  3423.     }
  3424.     private static boolean existsEsito(Integer esito, List<Integer> esiti ) {
  3425.         if(esiti!=null && esito!=null) {
  3426.             for (Integer e : esiti) {
  3427.                 if(e.intValue() == esito.intValue()) {
  3428.                     return true;
  3429.                 }
  3430.             }
  3431.         }
  3432.         return false;
  3433.     }
  3434.    
  3435.     public static final DumpConfigurazione buildDumpConfigurazione(RegistrazioneMessaggi dumpConf, boolean isErogazione, ErogazioniEnv env) throws Exception {
  3436.         final RegistrazioneMessaggiConfigurazione richiesta = dumpConf.getRichiesta();
  3437.         final RegistrazioneMessaggiConfigurazione risposta = dumpConf.getRisposta();

  3438.         final String statoDump = dumpConf.getStato().toString();
  3439.         final String statoDumpRichiesta             = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.isAbilitato() )).toString();
  3440.         final String statoDumpRisposta              = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.isAbilitato() )).toString();
  3441.        
  3442.         final String dumpRichiestaIngressoHeader    = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getIngresso().isHeaders() )).toString();
  3443.         final String dumpRichiestaIngressoPayload   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getIngresso().isPayload() )).toString();
  3444.         String dumpRichiestaIngressoPayloadParsing = Helper.boolToStatoFunzionalitaConf(false).toString();
  3445.         String dumpRichiestaIngressoBody        = Helper.boolToStatoFunzionalitaConf(false).toString();
  3446.         String dumpRichiestaIngressoAttachments =  Helper.boolToStatoFunzionalitaConf(false).toString();
  3447.         if(richiesta!=null && richiesta.getIngresso()!=null &&
  3448.                 richiesta.getIngresso().isPayload()!=null && richiesta.getIngresso().isPayload()) {
  3449.             dumpRichiestaIngressoPayloadParsing = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getIngresso().isPayloadParsing() )).toString();
  3450.             if(richiesta.getIngresso().isPayloadParsing()!=null && richiesta.getIngresso().isPayloadParsing()) {
  3451.                 dumpRichiestaIngressoBody   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getIngresso().isBody() )).toString();
  3452.                 dumpRichiestaIngressoAttachments   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getIngresso().isAttachments() )).toString();
  3453.             }
  3454.         }
  3455.        
  3456.         final String dumpRichiestaUscitaHeader  = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getUscita().isHeaders() )).toString();
  3457.         final String dumpRichiestaUscitaPayload   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getUscita().isPayload() )).toString();
  3458.         String dumpRichiestaUscitaPayloadParsing = Helper.boolToStatoFunzionalitaConf(false).toString();
  3459.         String dumpRichiestaUscitaBody      = Helper.boolToStatoFunzionalitaConf(false).toString();
  3460.         String dumpRichiestaUscitaAttachments =  Helper.boolToStatoFunzionalitaConf(false).toString();
  3461.         if(richiesta!=null && richiesta.getUscita()!=null &&
  3462.                 richiesta.getUscita().isPayload()!=null && richiesta.getUscita().isPayload()) {
  3463.             dumpRichiestaUscitaPayloadParsing = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getUscita().isPayloadParsing() )).toString();
  3464.             if(richiesta.getUscita().isPayloadParsing()!=null && richiesta.getUscita().isPayloadParsing()) {
  3465.                 dumpRichiestaUscitaBody   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getUscita().isBody() )).toString();
  3466.                 dumpRichiestaUscitaAttachments   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> richiesta.getUscita().isAttachments() )).toString();
  3467.             }
  3468.         }
  3469.        
  3470.         final String dumpRispostaIngressoHeader = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getIngresso().isHeaders() )).toString();
  3471.         final String dumpRispostaIngressoPayload   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getIngresso().isPayload() )).toString();
  3472.         String dumpRispostaIngressoPayloadParsing = Helper.boolToStatoFunzionalitaConf(false).toString();
  3473.         String dumpRispostaIngressoBody         = Helper.boolToStatoFunzionalitaConf(false).toString();
  3474.         String dumpRispostaIngressoAttachments =  Helper.boolToStatoFunzionalitaConf(false).toString();
  3475.         if(risposta!=null && risposta.getIngresso()!=null &&
  3476.                 risposta.getIngresso().isPayload()!=null && risposta.getIngresso().isPayload()) {
  3477.             dumpRispostaIngressoPayloadParsing = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getIngresso().isPayloadParsing() )).toString();
  3478.             if(risposta.getIngresso().isPayloadParsing()!=null && risposta.getIngresso().isPayloadParsing()) {
  3479.                 dumpRispostaIngressoBody   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getIngresso().isBody() )).toString();
  3480.                 dumpRispostaIngressoAttachments   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getIngresso().isAttachments() )).toString();
  3481.             }
  3482.         }
  3483.        
  3484.         final String dumpRispostaUscitaHeader   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getUscita().isHeaders() )).toString();
  3485.         final String dumpRispostaUscitaPayload   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getUscita().isPayload() )).toString();
  3486.         String dumpRispostaUscitaPayloadParsing = Helper.boolToStatoFunzionalitaConf(false).toString();
  3487.         String dumpRispostaUscitaBody       = Helper.boolToStatoFunzionalitaConf(false).toString();
  3488.         String dumpRispostaUscitaAttachments =  Helper.boolToStatoFunzionalitaConf(false).toString();
  3489.         if(risposta!=null && risposta.getUscita()!=null &&
  3490.                 risposta.getUscita().isPayload()!=null && risposta.getUscita().isPayload()) {
  3491.             dumpRispostaUscitaPayloadParsing = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getUscita().isPayloadParsing() )).toString();
  3492.             if(risposta.getUscita().isPayloadParsing()!=null && risposta.getUscita().isPayloadParsing()) {
  3493.                 dumpRispostaUscitaBody   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getUscita().isBody() )).toString();
  3494.                 dumpRispostaUscitaAttachments   = Helper.boolToStatoFunzionalitaConf( evalnull( () -> risposta.getUscita().isAttachments() )).toString();
  3495.             }
  3496.         }
  3497.        
  3498.         DumpConfigurazione ret = new DumpConfigurazione();
  3499.        
  3500.         // Caso porta applicativa
  3501.         if (isErogazione) {
  3502.             if (!env.paHelper.checkDataConfigurazioneDump(TipoOperazione.OTHER,
  3503.                     true,   // showStato
  3504.                     statoDump,
  3505.                     false,  // showRealtime,
  3506.                     StatoFunzionalita.ABILITATO.getValue(),
  3507.                     statoDumpRichiesta,
  3508.                     statoDumpRisposta,
  3509.                     dumpRichiestaIngressoHeader, dumpRichiestaIngressoPayload, dumpRichiestaIngressoPayloadParsing, dumpRichiestaIngressoBody, dumpRichiestaIngressoAttachments,
  3510.                     dumpRichiestaUscitaHeader, dumpRichiestaUscitaPayload, dumpRichiestaUscitaPayloadParsing, dumpRichiestaUscitaBody, dumpRichiestaUscitaAttachments,
  3511.                     dumpRispostaIngressoHeader, dumpRispostaIngressoPayload, dumpRispostaIngressoPayloadParsing, dumpRispostaIngressoBody, dumpRispostaIngressoAttachments,
  3512.                     dumpRispostaUscitaHeader, dumpRispostaUscitaPayload, dumpRispostaUscitaPayloadParsing, dumpRispostaUscitaBody, dumpRispostaUscitaAttachments
  3513.                 )) {
  3514.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3515.             }
  3516.            
  3517.             ret = env.paHelper.getConfigurazioneDump(TipoOperazione.OTHER,
  3518.                     true,   // showStato
  3519.                     statoDump,
  3520.                     false,  // showRealtime,
  3521.                     StatoFunzionalita.ABILITATO.getValue(),         // realtime, Come da debug
  3522.                     statoDumpRichiesta,
  3523.                     statoDumpRisposta,
  3524.                     dumpRichiestaIngressoHeader, dumpRichiestaIngressoPayload, dumpRichiestaIngressoPayloadParsing, dumpRichiestaIngressoBody, dumpRichiestaIngressoAttachments,
  3525.                     dumpRichiestaUscitaHeader, dumpRichiestaUscitaPayload, dumpRichiestaUscitaPayloadParsing, dumpRichiestaUscitaBody, dumpRichiestaUscitaAttachments,
  3526.                     dumpRispostaIngressoHeader, dumpRispostaIngressoPayload, dumpRispostaIngressoPayloadParsing, dumpRispostaIngressoBody, dumpRispostaIngressoAttachments,
  3527.                     dumpRispostaUscitaHeader, dumpRispostaUscitaPayload, dumpRispostaUscitaPayloadParsing, dumpRispostaUscitaBody, dumpRispostaUscitaAttachments
  3528.                 );
  3529.         }
  3530.         else {  
  3531.            
  3532.             // Caso porta delegata
  3533.            
  3534.             if (!env.pdHelper.checkDataConfigurazioneDump(TipoOperazione.OTHER,
  3535.                     true,   // showStato
  3536.                     statoDump,
  3537.                     false,  // showRealtime,
  3538.                     StatoFunzionalita.ABILITATO.getValue(), // realtime
  3539.                     statoDumpRichiesta,
  3540.                     statoDumpRisposta,
  3541.                     dumpRichiestaIngressoHeader, dumpRichiestaIngressoPayload, dumpRichiestaIngressoPayloadParsing, dumpRichiestaIngressoBody, dumpRichiestaIngressoAttachments,
  3542.                     dumpRichiestaUscitaHeader, dumpRichiestaUscitaPayload, dumpRichiestaUscitaPayloadParsing, dumpRichiestaUscitaBody, dumpRichiestaUscitaAttachments,
  3543.                     dumpRispostaIngressoHeader, dumpRispostaIngressoPayload, dumpRispostaIngressoPayloadParsing, dumpRispostaIngressoBody, dumpRispostaIngressoAttachments,
  3544.                     dumpRispostaUscitaHeader, dumpRispostaUscitaPayload, dumpRispostaUscitaPayloadParsing, dumpRispostaUscitaBody, dumpRispostaUscitaAttachments
  3545.                 )) {
  3546.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3547.             }
  3548.            
  3549.             ret = env.pdHelper.getConfigurazioneDump(TipoOperazione.OTHER,
  3550.                     true,   // showStato
  3551.                     statoDump,
  3552.                     false,  // showRealtime,
  3553.                     StatoFunzionalita.ABILITATO.getValue(), // realtime, Come da debug
  3554.                     statoDumpRichiesta,
  3555.                     statoDumpRisposta,
  3556.                     dumpRichiestaIngressoHeader, dumpRichiestaIngressoPayload, dumpRichiestaIngressoPayloadParsing, dumpRichiestaIngressoBody, dumpRichiestaIngressoAttachments,
  3557.                     dumpRichiestaUscitaHeader, dumpRichiestaUscitaPayload, dumpRichiestaUscitaPayloadParsing, dumpRichiestaUscitaBody, dumpRichiestaUscitaAttachments,
  3558.                     dumpRispostaIngressoHeader, dumpRispostaIngressoPayload, dumpRispostaIngressoPayloadParsing, dumpRispostaIngressoBody, dumpRispostaIngressoAttachments,
  3559.                     dumpRispostaUscitaHeader, dumpRispostaUscitaPayload, dumpRispostaUscitaPayloadParsing, dumpRispostaUscitaBody, dumpRispostaUscitaAttachments
  3560.                 );
  3561.         }
  3562.        
  3563.         return ret;
  3564.        
  3565.     }
  3566.    
  3567.    
  3568.     public static final List<MappingErogazionePortaApplicativa> getMappingGruppiPA(String nomeGruppo, IdServizio idAsps,  
  3569.             AccordiServizioParteSpecificaCore apsCore ) throws Exception {
  3570.        
  3571.         return apsCore.mappingServiziPorteAppList(idAsps,idAsps.getId(), null).stream()
  3572.             .filter( m -> m.getDescrizione().equals(nomeGruppo) )
  3573.             .collect(Collectors.toList());
  3574.        
  3575.     }
  3576.    
  3577.    
  3578.     public static final List<MappingFruizionePortaDelegata> getMappingGruppiPD(
  3579.             String nomeGruppo,
  3580.             IDSoggetto idFruitore,
  3581.             IdServizio idAsps,  
  3582.             AccordiServizioParteSpecificaCore apsCore ) throws Exception {
  3583.        
  3584.         return apsCore.serviziFruitoriMappingList(idFruitore, idAsps, null).stream()
  3585.             .filter( m -> m.getDescrizione().equals(nomeGruppo))
  3586.             .collect(Collectors.toList());
  3587.        
  3588.     }
  3589.    
  3590.     public static final IDPortaApplicativa getIDGruppoPA(String nome, IdServizio idAsps, AccordiServizioParteSpecificaCore apsCore) throws Exception {
  3591.        
  3592.         return getMappingGruppiPA(nome, idAsps, apsCore).stream()
  3593.                 .map( m -> m.getIdPortaApplicativa() )
  3594.                 .findFirst()
  3595.                 .orElse(null);
  3596.        
  3597.     }
  3598.    
  3599.    
  3600.     public static final IDPortaApplicativa getIDGruppoPADefault(IdServizio idAsps, AccordiServizioParteSpecificaCore apsCore) throws Exception {
  3601.         return AccordiServizioParteSpecificaUtilities.getDefaultMappingPA(apsCore.mappingServiziPorteAppList(idAsps,idAsps.getId(), null))
  3602.                 .getIdPortaApplicativa();
  3603.     }
  3604.    
  3605.    
  3606.     public static final IDPortaDelegata getIDGruppoPDDefault(IDSoggetto idFruitore, IdServizio idAsps,  AccordiServizioParteSpecificaCore apsCore ) throws Exception {
  3607.         return AccordiServizioParteSpecificaUtilities.getDefaultMappingPD(apsCore.serviziFruitoriMappingList(idFruitore,idAsps,null))
  3608.                 .getIdPortaDelegata();
  3609.     }
  3610.    
  3611.    
  3612.     public static final IDPortaDelegata getIDGruppoPD(  
  3613.             String nome,
  3614.             IDSoggetto idFruitore,
  3615.             IdServizio idAsps,  
  3616.             AccordiServizioParteSpecificaCore apsCore ) throws Exception {
  3617.        
  3618.         return getMappingGruppiPD(nome, idFruitore, idAsps, apsCore).stream()
  3619.                 .map( m -> m.getIdPortaDelegata())
  3620.                 .findFirst()
  3621.                 .orElse(null);
  3622.     }
  3623.    
  3624.    
  3625.     public static final List<String> getAzioniOccupateErogazione(IdServizio idAsps, AccordiServizioParteSpecificaCore apsCore, PorteApplicativeCore paCore) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  3626.        
  3627.          return apsCore.mappingServiziPorteAppList(idAsps,idAsps.getId(), null).stream()
  3628.             .map ( m -> {
  3629.                     try {
  3630.                         return paCore.getPortaApplicativa(m.getIdPortaApplicativa());
  3631.                     } catch (Exception e) {
  3632.                         throw new RuntimeException(e);
  3633.                     }
  3634.                 })
  3635.             .filter( pa -> pa.getAzione() != null && pa.getAzione().getAzioneDelegataList() != null )
  3636.             .flatMap( pa -> pa.getAzione().getAzioneDelegataList().stream())
  3637.             .collect(Collectors.toList());

  3638.     }
  3639.    
  3640.     public static final List<String> getAzioniDisponibiliRateLimitingPortaApplicativa(IdServizio idAsps, PortaApplicativa pa) {
  3641.         return null;
  3642.     }
  3643.    
  3644.     public static final List<String> getAzioniDisponibiliRateLimitingPortaDelegata(PortaDelegata pd, ErogazioniEnv env) {
  3645.         if (pd.getAzione() != null && pd.getAzione().getAzioneDelegataList().size() > 0) {
  3646.             return pd.getAzione().getAzioneDelegataList();
  3647.         }
  3648.        
  3649.         return null;
  3650.        
  3651.         //env.paCore.getAzioni(asps, aspc, false, false, getAzioniOccupateFruizione()));
  3652.         /*List<String> azioniAll = this.confCore.getAzioni(env.tipo_protocollo, protocolliValue,
  3653.                 pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario(),
  3654.                 pa.getServizio().getTipo(), pa.getServizio().getNome(), pa.getServizio().getVersione());*/
  3655.     }
  3656.    
  3657.     public static final List<String> getAzioniOccupateFruizione(IdServizio idAsps, IDSoggetto idFruitore, AccordiServizioParteSpecificaCore apsCore, PorteDelegateCore pdCore) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  3658.        
  3659.          return apsCore.serviziFruitoriMappingList(idFruitore, idAsps, null).stream()
  3660.             .map ( m -> {
  3661.                     try {
  3662.                         return pdCore.getPortaDelegata(m.getIdPortaDelegata());
  3663.                     } catch (Exception e) {
  3664.                         throw new RuntimeException(e);
  3665.                     }
  3666.                 })
  3667.             .filter( pa -> pa.getAzione() != null && pa.getAzione().getAzioneDelegataList() != null )
  3668.             .flatMap( pa -> pa.getAzione().getAzioneDelegataList().stream())
  3669.             .collect(Collectors.toList());

  3670.     }

  3671.    
  3672.     public static final List<String> getDescrizioniMappingPA(List<MappingErogazionePortaApplicativa> listaMappingErogazione) {
  3673.         return listaMappingErogazione.stream().map( m -> m.getDescrizione() ).collect(Collectors.toList() );
  3674.     }

  3675.    
  3676.     public static final List<String> getDescrizioniMappingPD(List<MappingFruizionePortaDelegata> listaMappingErogazione) {
  3677.         return listaMappingErogazione.stream().map( m -> m.getDescrizione() ).collect(Collectors.toList() );
  3678.     }



  3679.     public static final ListaApiImplAllegati findAllAllegati(String q, Integer limit, Integer offset, UriInfo uriInfo,
  3680.             final ErogazioniEnv env, final AccordoServizioParteSpecifica asps)
  3681.             throws DriverRegistroServiziException, InstantiationException, IllegalAccessException, CoreException {
  3682.         int idLista = Liste.SERVIZI_ALLEGATI;
  3683.        
  3684.         final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  3685.         final List<Documento> lista = env.apsCore.serviziAllegatiList(asps.getId().intValue(), ricerca);
  3686.        
  3687.         if ( env.findall_404 && lista.isEmpty() ) {
  3688.             throw FaultCode.NOT_FOUND.toException("Nessun allegato associato");
  3689.         }
  3690.        
  3691.         ListaApiImplAllegati ret = ListaUtils.costruisciListaPaginata(
  3692.                 uriInfo,
  3693.                 ricerca.getIndexIniziale(idLista),
  3694.                 ricerca.getPageSize(idLista),
  3695.                 ricerca.getNumEntries(idLista),
  3696.                 ListaApiImplAllegati.class
  3697.             );
  3698.        
  3699.         lista.forEach( d->
  3700.             ret.addItemsItem( ImplAllegatoToItem(
  3701.                     documentoToImplAllegato(d))
  3702.                 )
  3703.         );
  3704.         return ret;
  3705.     }



  3706.     public static final ApiImplVersioneApiView aspsToApiImplVersioneApiView(final ErogazioniEnv env,
  3707.             final AccordoServizioParteSpecifica asps)
  3708.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  3709.         final AccordoServizioParteComuneSintetico aspc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3710.        
  3711.         ApiImplVersioneApiView ret = new ApiImplVersioneApiView();
  3712.        
  3713.         AccordoServizioParteComuneSintetico api = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3714.        
  3715.         ret.setApiNome(aspc.getNome());
  3716.         ret.setApiSoapServizio(asps.getPortType());
  3717.         ret.setApiVersione(aspc.getVersione());
  3718.         ret.setProfilo(env.profilo);
  3719.         ret.setSoggetto(aspc.getSoggettoReferente().getNome());
  3720.         ret.setTipoServizio(asps.getTipo());
  3721.        
  3722.           // Lista di Accordi Compatibili
  3723.         List<AccordoServizioParteComune> asParteComuneCompatibili = env.apsCore.findAccordiParteComuneBySoggettoAndNome(
  3724.                 api.getNome(),
  3725.                 new IDSoggetto(api.getSoggettoReferente().getTipo(), api.getSoggettoReferente().getNome())
  3726.             );
  3727.        
  3728.         ret.setVersioni(asParteComuneCompatibili.stream().map( a -> a.getVersione() ).collect(Collectors.toList()));
  3729.         return ret;
  3730.     }



  3731.     public static final ApiImplInformazioniGeneraliView erogazioneToApiImplInformazioniGeneraliView(final ErogazioniEnv env,
  3732.             final AccordoServizioParteSpecifica asps) {
  3733.         ApiImplViewItem item = aspsToErogazioneViewItem(env, asps);

  3734.         ApiImplInformazioniGeneraliView ret = new ApiImplInformazioniGeneraliView();
  3735.        
  3736.         ret.setApiSoapServizio(item.getApiSoapServizio());
  3737.         ret.setNome(item.getNome());
  3738.         ret.setProfilo(item.getProfilo());
  3739.         ret.setTipo(item.getTipoServizio());
  3740.         return ret;
  3741.     }
  3742.    
  3743.     public static final ApiImplInformazioniGeneraliView fruizioneToApiImplInformazioniGeneraliView(final ErogazioniEnv env,
  3744.             final AccordoServizioParteSpecifica asps, IdSoggetto fruitore) {
  3745.        
  3746.         ApiImplViewItem item = aspsToFruizioneViewItem(env, asps, fruitore);

  3747.         ApiImplInformazioniGeneraliView ret = new ApiImplInformazioniGeneraliView();
  3748.        
  3749.         ret.setApiSoapServizio(item.getApiSoapServizio());
  3750.         ret.setNome(item.getNome());
  3751.         ret.setProfilo(item.getProfilo());
  3752.         ret.setTipo(item.getTipoServizio());
  3753.         return ret;
  3754.     }


  3755.     public static final CorsConfigurazione buildCorsConfigurazione(GestioneCors body, final ErogazioniEnv env,
  3756.             final CorsConfigurazione oldConf) throws Exception {
  3757.        
  3758.        
  3759.         final String statoCorsPorta = body.isRidefinito()
  3760.                 ?       CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO
  3761.                 :       CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
  3762.        
  3763.         final GestioneCorsAccessControl c = body.getAccessControl();
  3764.        
  3765.         final String corsStato = Helper.boolToStatoFunzionalita( body.getTipo() != TipoGestioneCorsEnum.DISABILITATO ).toString();
  3766.         final TipoGestioneCORS corsTipo =  Enums.tipoGestioneCorsFromRest.get( body.getTipo() );
  3767.         final String allowOrigins = String.join(",", BaseHelper.evalorElse( () -> c.getAllowOrigins(), new ArrayList<>()) );
  3768.         final String allowHeaders = String.join(",", BaseHelper.evalorElse( () -> c.getAllowHeaders(), new ArrayList<>()) );
  3769.         final String exposeHeaders = String.join(",", BaseHelper.evalorElse( () -> c.getExposeHeaders(), new ArrayList<>()) );
  3770.         final String allowMethods = String.join(
  3771.                 ",",
  3772.                 BaseHelper.evalorElse( () -> c.getAllowMethods(), new ArrayList<HttpMethodEnum>() )
  3773.                     .stream().map( m -> m.name()).collect(Collectors.toList())
  3774.             );
  3775.    
  3776.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_STATO, corsStato );
  3777.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_TIPO, corsTipo.toString() );
  3778.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_ORIGINS, ServletUtils.boolToCheckBoxStatus(c.isAllAllowOrigins()) );
  3779.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_ORIGINS, allowOrigins );
  3780.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_HEADERS, ServletUtils.boolToCheckBoxStatus(c.isAllAllowHeaders()) );
  3781.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_HEADERS, allowHeaders );
  3782.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_METHODS, ServletUtils.boolToCheckBoxStatus(c.isAllAllowMethods()) );
  3783.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_METHODS, allowMethods );
  3784.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_EXPOSE_HEADERS, exposeHeaders );
  3785.         env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_MAX_AGE, ServletUtils.boolToCheckBoxStatus(c.isMaxAge()) );
  3786.         if(c.isMaxAge()!=null && c.isMaxAge() && c.getMaxAgeSeconds()!=null) {
  3787.             env.requestWrapper.overrideParameter( CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_MAX_AGE_SECONDS, c.getMaxAgeSeconds() );
  3788.         }
  3789.    
  3790.         if ( !env.paHelper.checkDataConfigurazioneCorsPorta(TipoOperazione.OTHER, true, statoCorsPorta) ) {
  3791.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3792.         }
  3793.        
  3794.    
  3795.         return env.paHelper.getGestioneCors(
  3796.                 body.getTipo() != TipoGestioneCorsEnum.DISABILITATO,
  3797.                 corsTipo,  
  3798.                 c.isAllAllowOrigins(),
  3799.                 c.isAllAllowHeaders(),
  3800.                 c.isAllAllowMethods(),
  3801.                 allowHeaders,
  3802.                 allowOrigins,
  3803.                 allowMethods,
  3804.                 c.isAllowCredentials(),
  3805.                 exposeHeaders,
  3806.                 c.isMaxAge()!=null ? c.isMaxAge() : false,
  3807.                 c.getMaxAgeSeconds()!=null ? c.getMaxAgeSeconds() : -1
  3808.             );
  3809.     }
  3810.    
  3811.    
  3812.     public static final GestioneToken buildGestioneToken(ControlloAccessiGestioneToken body, Object porta, boolean isPortaDelegata, ConsoleHelper coHelper, ErogazioniEnv env) throws Exception {
  3813.                
  3814.         GestioneToken ret = new GestioneToken();
  3815.        
  3816.         ret.setPolicy( body.getPolicy() );
  3817.         ret.setTokenOpzionale( Helper.boolToStatoFunzionalitaConf(body.isTokenOpzionale()) );
  3818.         ret.setValidazione( StatoFunzionalitaConWarning.toEnumConstant(  evalnull(  () -> body.getValidazioneJwt().toString() )) );
  3819.         ret.setIntrospection( StatoFunzionalitaConWarning.toEnumConstant( evalnull( () -> body.getIntrospection().toString() )) );
  3820.         ret.setUserInfo( StatoFunzionalitaConWarning.toEnumConstant( evalnull( () -> body.getUserInfo().toString() )) );
  3821.         ret.setForward( Helper.boolToStatoFunzionalitaConf(body.isTokenForward()) );    
  3822.        
  3823.         return ret;
  3824.        
  3825.     }
  3826.    
  3827.     public static final void fillGestioneToken(GestioneToken ret, ControlloAccessiGestioneToken body) {
  3828.         ret.setPolicy( body.getPolicy() );
  3829.         ret.setTokenOpzionale( Helper.boolToStatoFunzionalitaConf(body.isTokenOpzionale()) );
  3830.         ret.setValidazione( StatoFunzionalitaConWarning.toEnumConstant(  evalnull(  () -> body.getValidazioneJwt().toString() )) );
  3831.         ret.setIntrospection( StatoFunzionalitaConWarning.toEnumConstant( evalnull( () -> body.getIntrospection().toString() )) );
  3832.         ret.setUserInfo( StatoFunzionalitaConWarning.toEnumConstant( evalnull( () -> body.getUserInfo().toString() )) );
  3833.         ret.setForward( Helper.boolToStatoFunzionalitaConf(body.isTokenForward()) );            
  3834.     }
  3835.    
  3836.     public static final RegistrazioneMessaggiConfigurazioneRegola fromDumpConfigurazioneRegola(DumpConfigurazioneRegola r) {
  3837.         if (r == null) return null;
  3838.         RegistrazioneMessaggiConfigurazioneRegola ret = new RegistrazioneMessaggiConfigurazioneRegola();
  3839.        
  3840.         ret.setPayload(Helper.statoFunzionalitaConfToBool( r.getPayload()) );
  3841.         ret.setHeaders(Helper.statoFunzionalitaConfToBool( r.getHeaders()) );
  3842.         if(ret.isPayload()!=null && ret.isPayload()) {
  3843.             ret.setPayloadParsing(Helper.statoFunzionalitaConfToBool( r.getPayloadParsing()) );
  3844.             if(ret.isPayloadParsing()!=null && ret.isPayloadParsing()) {
  3845.                 ret.setBody(Helper.statoFunzionalitaConfToBool( r.getBody()) );
  3846.                 ret.setAttachments(Helper.statoFunzionalitaConfToBool( r.getAttachments()) );
  3847.             }
  3848.         }
  3849.        
  3850.         return ret;
  3851.     }



  3852.     public static final ControlloAccessiAutenticazioneToken fromGestioneTokenAutenticazione(
  3853.             final GestioneTokenAutenticazione tokAut) {
  3854.         ControlloAccessiAutenticazioneToken token = new ControlloAccessiAutenticazioneToken();
  3855.         token.setClientId(Helper.statoFunzionalitaConfToBool( tokAut.getClientId() ));
  3856.         token.setEmail(Helper.statoFunzionalitaConfToBool( tokAut.getEmail() ));
  3857.         token.setIssuer(Helper.statoFunzionalitaConfToBool( tokAut.getIssuer() ));
  3858.         token.setSubject(Helper.statoFunzionalitaConfToBool( tokAut.getSubject() ));
  3859.         token.setUsername(Helper.statoFunzionalitaConfToBool(tokAut.getUsername() ));
  3860.         return token;
  3861.     }

  3862.    
  3863.    
  3864.     public static final RegistrazioneDiagnosticiConfigurazione fromDiagnosticiConfigurazione(final PortaTracciamento paTracciamento) {
  3865.         final RegistrazioneDiagnosticiConfigurazione ret = new RegistrazioneDiagnosticiConfigurazione();
  3866.        
  3867.         if (paTracciamento != null && paTracciamento.getSeverita()!=null) {
  3868.             ret.setStato(StatoDefaultRidefinitoEnum.RIDEFINITO);
  3869.            
  3870.             switch (paTracciamento.getSeverita()) {
  3871.             case ALL:
  3872.                 ret.setSeverita(DiagnosticiSeverita.ALL);
  3873.                 break;
  3874.             case DEBUG_HIGH:
  3875.                 ret.setSeverita(DiagnosticiSeverita.DEBUG_HIGH);
  3876.                 break;
  3877.             case DEBUG_MEDIUM:
  3878.                 ret.setSeverita(DiagnosticiSeverita.DEBUG_MEDIUM);
  3879.                 break;
  3880.             case DEBUG_LOW:
  3881.                 ret.setSeverita(DiagnosticiSeverita.DEBUG_LOW);
  3882.                 break;
  3883.             case INFO_PROTOCOL:
  3884.                 ret.setSeverita(DiagnosticiSeverita.INFO_PROTOCOL);
  3885.                 break;
  3886.             case INFO_INTEGRATION:
  3887.                 ret.setSeverita(DiagnosticiSeverita.INFO_INTEGRATION);
  3888.                 break;
  3889.             case ERROR_PROTOCOL:
  3890.                 ret.setSeverita(DiagnosticiSeverita.ERROR_PROTOCOL);
  3891.                 break;
  3892.             case ERROR_INTEGRATION:
  3893.                 ret.setSeverita(DiagnosticiSeverita.ERROR_INTEGRATION);
  3894.                 break;
  3895.             case FATAL:
  3896.                 ret.setSeverita(DiagnosticiSeverita.FATAL);
  3897.                 break;
  3898.             case OFF:
  3899.                 ret.setSeverita(DiagnosticiSeverita.OFF);
  3900.                 break;
  3901.             }
  3902.            
  3903.         }
  3904.         else {
  3905.             ret.setStato(StatoDefaultRidefinitoEnum.DEFAULT);
  3906.         }
  3907.         return ret;
  3908.     }
  3909.    
  3910.    
  3911.     public static final RegistrazioneTransazioniConfigurazione fromTransazioniConfigurazione(final PortaTracciamento paTracciamento, Environment env) throws ProtocolException {
  3912.         final RegistrazioneTransazioniConfigurazione ret = new RegistrazioneTransazioniConfigurazione();
  3913.        
  3914.         if (paTracciamento != null &&
  3915.                 (
  3916.                         paTracciamento.getDatabase()!=null ||
  3917.                         paTracciamento.getFiletrace()!=null ||
  3918.                         (
  3919.                                 paTracciamento.getEsiti()!=null && StringUtils.isNoneEmpty(paTracciamento.getEsiti()) &&
  3920.                                 (
  3921.                                         paTracciamento.getDatabase()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getDatabase().getFiltroEsiti())
  3922.                                         ||
  3923.                                         paTracciamento.getFiletrace()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletrace().getFiltroEsiti())
  3924.                                 )
  3925.                         )
  3926.                         ||
  3927.                         paTracciamento.getFiletraceConfig()!=null ||
  3928.                         paTracciamento.getTransazioni()!=null
  3929.                         )
  3930.             ) {
  3931.             ret.setStato(StatoDefaultRidefinitoEnum.RIDEFINITO);
  3932.            
  3933.             if(paTracciamento.getDatabase()!=null) {
  3934.                 ret.setDatabase(fromTransazioniConfigurazioneBase(paTracciamento.getDatabase(), false));
  3935.             }
  3936.             if(paTracciamento.getFiletrace()!=null) {
  3937.                 RegistrazioneTransazioniConfigurazioneFiletrace f = (RegistrazioneTransazioniConfigurazioneFiletrace) fromTransazioniConfigurazioneBase(paTracciamento.getFiletrace(), true);
  3938.                 if(paTracciamento.getFiletraceConfig()!=null) {
  3939.                     f.setConfigPath(paTracciamento.getFiletraceConfig().getConfig());
  3940.                     if(paTracciamento.getFiletraceConfig().getDumpIn()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpIn().getStato())) {
  3941.                         f.setDumpClient(new RegistrazioneTransazioniConfigurazioneFiletraceMessaggio());
  3942.                         f.getDumpClient().setHeaders(StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpIn().getHeader()));
  3943.                         f.getDumpClient().setPayload(StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpIn().getPayload()));
  3944.                     }
  3945.                     if(paTracciamento.getFiletraceConfig().getDumpOut()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpOut().getStato())) {
  3946.                         f.setDumpServer(new RegistrazioneTransazioniConfigurazioneFiletraceMessaggio());
  3947.                         f.getDumpServer().setHeaders(StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpOut().getHeader()));
  3948.                         f.getDumpServer().setPayload(StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletraceConfig().getDumpOut().getPayload()));
  3949.                     }
  3950.                 }
  3951.                 ret.setFiletrace(f);
  3952.             }
  3953.             if((paTracciamento.getEsiti()!=null && StringUtils.isNoneEmpty(paTracciamento.getEsiti())) &&
  3954.                     (
  3955.                             paTracciamento.getDatabase()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getDatabase().getFiltroEsiti())
  3956.                             ||
  3957.                             paTracciamento.getFiletrace()!=null && StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiletrace().getFiltroEsiti())
  3958.                     )
  3959.                     ) {
  3960.                 Logger log = LoggerWrapperFactory.getLogger(ErogazioniApiHelper.class);
  3961.                 List<String> esiti  = EsitiConfigUtils.getRegistrazioneEsiti(paTracciamento.getEsiti(), log, new StringBuilder(), EsitiProperties.getInstance(log, env.protocolFactory));
  3962.                 if(esiti!=null && !esiti.isEmpty()) {
  3963.                     ret.setFiltro(new RegistrazioneTransazioniConfigurazioneFiltroEsiti());
  3964.                     for (String e : esiti) {
  3965.                         ret.getFiltro().addEsitiItem(Integer.valueOf(e));      
  3966.                     }
  3967.                 }
  3968.             }
  3969.             if(paTracciamento.getTransazioni()!=null) {
  3970.                 ret.setInformazioni(new RegistrazioneTransazioniConfigurazioneInformazioniRegistrate());
  3971.                 if(paTracciamento.getTransazioni().getTempiElaborazione()!=null) {
  3972.                     if(org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(paTracciamento.getTransazioni().getTempiElaborazione())) {
  3973.                         ret.getInformazioni().setTempiElaborazione(TracciamentoTransazioniStatoFase.ABILITATO);                    
  3974.                     }
  3975.                     else {
  3976.                         ret.getInformazioni().setTempiElaborazione(TracciamentoTransazioniStatoFase.DISABILITATO);                      
  3977.                     }
  3978.                 }
  3979.                 else {
  3980.                     ret.getInformazioni().setTempiElaborazione(TracciamentoTransazioniStatoFase.DISABILITATO);              
  3981.                 }
  3982.                 if(paTracciamento.getTransazioni().getToken()!=null) {
  3983.                     if(org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(paTracciamento.getTransazioni().getToken())) {
  3984.                         ret.getInformazioni().setToken(TracciamentoTransazioniStatoFase.ABILITATO);                    
  3985.                     } else {
  3986.                         ret.getInformazioni().setToken(TracciamentoTransazioniStatoFase.DISABILITATO);                      
  3987.                     }
  3988.                 }
  3989.                 else {
  3990.                     ret.getInformazioni().setToken(TracciamentoTransazioniStatoFase.DISABILITATO);  
  3991.                 }
  3992.             }
  3993.            
  3994.             // check finale
  3995.             if(ret.getDatabase()==null && ret.getFiletrace()==null && ret.getFiltro()==null && ret.getInformazioni()==null) {
  3996.                 ret.setStato(StatoDefaultRidefinitoEnum.DEFAULT);
  3997.             }
  3998.         }
  3999.         else {
  4000.             ret.setStato(StatoDefaultRidefinitoEnum.DEFAULT);
  4001.         }
  4002.         return ret;
  4003.     }
  4004.     private static final RegistrazioneTransazioniConfigurazioneBase fromTransazioniConfigurazioneBase(final TracciamentoConfigurazione paTracciamento, boolean fileTrace) {
  4005.         RegistrazioneTransazioniConfigurazioneBase c = null;
  4006.        
  4007.         if(paTracciamento.getStato()!=null) {
  4008.            
  4009.             c =  fileTrace ? new RegistrazioneTransazioniConfigurazioneFiletrace() : new RegistrazioneTransazioniConfigurazioneBase();
  4010.            
  4011.             switch (paTracciamento.getStato()) {
  4012.             case ABILITATO:
  4013.                 c.setStato(TracciamentoTransazioniStato.ABILITATO);
  4014.                 break;
  4015.             case DISABILITATO:
  4016.                 c.setStato(TracciamentoTransazioniStato.DISABILITATO);
  4017.                 break;
  4018.             case CONFIGURAZIONE_ESTERNA:
  4019.                 c.setStato(TracciamentoTransazioniStato.CONFIGURAZIONEESTERNA);
  4020.                 break;
  4021.             case PERSONALIZZATO:
  4022.                 c.setStato(TracciamentoTransazioniStato.PERSONALIZZATO);
  4023.                
  4024.                 c.setFasi(new RegistrazioneTransazioniConfigurazioneFasi());
  4025.                
  4026.                 if(paTracciamento.getRequestIn()!=null) {
  4027.                     switch (paTracciamento.getRequestIn()) {
  4028.                         case ABILITATO:
  4029.                             c.getFasi().setRichiestaIngresso(TracciamentoTransazioniStatoFaseBloccante.BLOCCANTE);
  4030.                             break;
  4031.                         case NON_BLOCCANTE:
  4032.                             c.getFasi().setRichiestaIngresso(TracciamentoTransazioniStatoFaseBloccante.NON_BLOCCANTE);
  4033.                             break;
  4034.                         case DISABILITATO:
  4035.                             c.getFasi().setRichiestaIngresso(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4036.                             break;
  4037.                     }
  4038.                 }
  4039.                 else {
  4040.                     c.getFasi().setRichiestaIngresso(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4041.                 }
  4042.                
  4043.                 if(paTracciamento.getRequestOut()!=null) {
  4044.                     switch (paTracciamento.getRequestOut()) {
  4045.                         case ABILITATO:
  4046.                             c.getFasi().setRichiestaUscita(TracciamentoTransazioniStatoFaseBloccante.BLOCCANTE);
  4047.                             break;
  4048.                         case NON_BLOCCANTE:
  4049.                             c.getFasi().setRichiestaUscita(TracciamentoTransazioniStatoFaseBloccante.NON_BLOCCANTE);
  4050.                             break;
  4051.                         case DISABILITATO:
  4052.                             c.getFasi().setRichiestaUscita(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4053.                             break;
  4054.                     }
  4055.                 }
  4056.                 else {
  4057.                     c.getFasi().setRichiestaUscita(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4058.                 }
  4059.                
  4060.                 if(paTracciamento.getResponseOut()!=null) {
  4061.                     switch (paTracciamento.getResponseOut()) {
  4062.                         case ABILITATO:
  4063.                             c.getFasi().setRispostaUscita(TracciamentoTransazioniStatoFaseBloccante.BLOCCANTE);
  4064.                             break;
  4065.                         case NON_BLOCCANTE:
  4066.                             c.getFasi().setRispostaUscita(TracciamentoTransazioniStatoFaseBloccante.NON_BLOCCANTE);
  4067.                             break;
  4068.                         case DISABILITATO:
  4069.                             c.getFasi().setRispostaUscita(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4070.                             break;
  4071.                     }
  4072.                 }
  4073.                 else {
  4074.                     c.getFasi().setRispostaUscita(TracciamentoTransazioniStatoFaseBloccante.DISABILITATO);
  4075.                 }
  4076.                
  4077.                 if(paTracciamento.getResponseOutComplete()!=null) {
  4078.                     if(org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(paTracciamento.getResponseOutComplete())) {
  4079.                         c.getFasi().setRispostaConsegnata(TracciamentoTransazioniStatoFase.ABILITATO);
  4080.                     }else {
  4081.                         c.getFasi().setRispostaConsegnata(TracciamentoTransazioniStatoFase.DISABILITATO);
  4082.                     }
  4083.                 }
  4084.                 else {
  4085.                     c.getFasi().setRispostaConsegnata(TracciamentoTransazioniStatoFase.DISABILITATO);
  4086.                 }
  4087.                
  4088.                 break;
  4089.             }
  4090.                        
  4091.             if(paTracciamento.getFiltroEsiti()!=null) {
  4092.                 if(org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(paTracciamento.getFiltroEsiti())) {
  4093.                     c.setFiltroEsiti(TracciamentoTransazioniStatoFase.ABILITATO);
  4094.                 }
  4095.                 else{
  4096.                     c.setFiltroEsiti(TracciamentoTransazioniStatoFase.DISABILITATO);
  4097.                 }
  4098.             }
  4099.            
  4100.         }
  4101.        
  4102.         return c;
  4103.     }


  4104.     public static final RegistrazioneMessaggi fromDumpConfigurazione(final DumpConfigurazione paDump) {
  4105.         final RegistrazioneMessaggi ret = new RegistrazioneMessaggi();
  4106.        
  4107.         if (paDump != null) {
  4108.             ret.setStato(StatoDefaultRidefinitoEnum.RIDEFINITO);
  4109.            
  4110.             final RegistrazioneMessaggiConfigurazione richiesta = new RegistrazioneMessaggiConfigurazione();
  4111.            
  4112.             richiesta.setAbilitato( isDumpConfigurazioneAbilitato(paDump, false) );
  4113.             if ( richiesta.isAbilitato() ) {
  4114.                 richiesta.setIngresso( fromDumpConfigurazioneRegola(paDump.getRichiestaIngresso()));
  4115.                 richiesta.setUscita( fromDumpConfigurazioneRegola(paDump.getRichiestaUscita()));
  4116.             }
  4117.            
  4118.             ret.setRichiesta(richiesta);
  4119.                            
  4120.             RegistrazioneMessaggiConfigurazione risposta = new RegistrazioneMessaggiConfigurazione();
  4121.             risposta.setAbilitato( isDumpConfigurazioneAbilitato(paDump,true) );
  4122.             if (risposta.isAbilitato()) {
  4123.                 risposta.setIngresso( fromDumpConfigurazioneRegola( paDump.getRispostaIngresso()) );
  4124.                 risposta.setUscita( fromDumpConfigurazioneRegola( paDump.getRispostaUscita()) );
  4125.             }
  4126.            
  4127.             ret.setRisposta(risposta);              
  4128.         }
  4129.         else {
  4130.             ret.setStato(StatoDefaultRidefinitoEnum.DEFAULT);
  4131.         }
  4132.         return ret;
  4133.     }



  4134.     public static final Validazione fromValidazioneContenutiApplicativi(final ValidazioneContenutiApplicativi vx) {
  4135.         final Validazione ret = new Validazione();
  4136.        
  4137.         if (vx == null) {
  4138.             ret.setStato(StatoFunzionalitaConWarningEnum.DISABILITATO);
  4139.         } else {

  4140.             ret.setMtom( Helper.statoFunzionalitaConfToBool(vx.getAcceptMtomMessage()) );
  4141.             ret.setStato( StatoFunzionalitaConWarningEnum.valueOf(vx.getStato().name()));
  4142.             ret.setTipo(  TipoValidazioneEnum.valueOf(vx.getTipo().name()) );
  4143.         }
  4144.         return ret;
  4145.     }


  4146.     public static final String readHeadersResponseCaching(List<String> headers) {
  4147.         if(headers==null || headers.isEmpty()) {
  4148.             return null;
  4149.         }
  4150.         StringBuilder  bf = new StringBuilder();
  4151.         for (String hdr : headers) {
  4152.             if(bf.length()>0) {
  4153.                 bf.append(",");
  4154.             }
  4155.             bf.append(hdr);
  4156.         }
  4157.         return bf.toString();
  4158.     }
  4159.    
  4160.     public static final List<ResponseCachingConfigurazioneRegola> getRegoleResponseCaching(List<CachingRispostaRegola> regole){
  4161.         if(regole==null || regole.isEmpty()) {
  4162.             return null;
  4163.         }
  4164.         List<ResponseCachingConfigurazioneRegola> returnList = new ArrayList<>();
  4165.         for (CachingRispostaRegola cachingRispostaRegola : regole) {
  4166.             ResponseCachingConfigurazioneRegola rule = new ResponseCachingConfigurazioneRegola();
  4167.             if(cachingRispostaRegola.getReturnCodeMin()!=null)
  4168.                 rule.setReturnCodeMin(cachingRispostaRegola.getReturnCodeMin());
  4169.             if(cachingRispostaRegola.getReturnCodeMax()!=null)
  4170.                 rule.setReturnCodeMax(cachingRispostaRegola.getReturnCodeMax());
  4171.             rule.setFault(cachingRispostaRegola.isFault());
  4172.             if(cachingRispostaRegola.getCacheTimeoutSeconds()!=null)
  4173.                 rule.setCacheTimeoutSeconds(cachingRispostaRegola.getCacheTimeoutSeconds());
  4174.             returnList.add(rule);
  4175.         }
  4176.         return returnList;
  4177.     }

  4178.     public static final ResponseCachingConfigurazione buildResponseCachingConfigurazione(CachingRisposta body, PorteApplicativeHelper paHelper) {
  4179.         ResponseCachingConfigurazione newConfigurazione = null;
  4180.         if (body.getStato() == StatoDefaultRidefinitoEnum.DEFAULT) {
  4181.            
  4182.         }
  4183.        
  4184.         else if ( body.getStato() == StatoDefaultRidefinitoEnum.RIDEFINITO ) {
  4185.             newConfigurazione = paHelper.getResponseCaching(
  4186.                     body.isAbilitato(),  // responseCachingEnabled
  4187.                     body.getCacheTimeoutSeconds(), // responseCachingSeconds
  4188.                     body.isMaxResponseSize(), // responseCachingMaxResponseSize
  4189.                     body.getMaxResponseSizeKb(), // responseCachingMaxResponseSizeBytes
  4190.                     body.isHashRequestUri(), // responseCachingDigestUrlInvocazione
  4191.                     (readHeadersResponseCaching(body.getHashHeaders())!=null), // responseCachingDigestHeaders
  4192.                     body.isHashPayload(), // responseCachingDigestPayload
  4193.                     readHeadersResponseCaching(body.getHashHeaders()), // responseCachingDigestHeadersNomiHeaders
  4194.                     convertToStatoFunzionalitaCacheDigestQueryParameter(body),//responseCachingDigestQueryParameter
  4195.                     readHeadersResponseCaching(body.getHashQueryParamaters()), // responseCachingDigestNomiParametriQuery
  4196.                     body.isControlNoCache(), // responseCachingCacheControlNoCache
  4197.                     body.isControlMaxAge(), // responseCachingCacheControlMaxAge
  4198.                     body.isControlNoStore(), // responseCachingCacheControlNoStore
  4199.                     getRegoleResponseCaching(body.getRegole())// listaRegoleCachingConfigurazione
  4200.                 );
  4201.         }
  4202.         return newConfigurazione;
  4203.     }
  4204.    
  4205.     private static final StatoFunzionalitaCacheDigestQueryParameter convertToStatoFunzionalitaCacheDigestQueryParameter(CachingRisposta body) {
  4206.         if(body!=null && body.isHashAllQueryParameters()!=null) {
  4207.             if(body.isHashAllQueryParameters()) {
  4208.                 return StatoFunzionalitaCacheDigestQueryParameter.ABILITATO;
  4209.             }
  4210.             else {
  4211.                 if(body.getHashQueryParamaters()!=null && !body.getHashQueryParamaters().isEmpty()) {
  4212.                     return StatoFunzionalitaCacheDigestQueryParameter.SELEZIONE_PUNTUALE;
  4213.                 }
  4214.                 else {
  4215.                     return StatoFunzionalitaCacheDigestQueryParameter.DISABILITATO;
  4216.                 }
  4217.             }
  4218.         }
  4219.         else {
  4220.             // default
  4221.             return StatoFunzionalitaCacheDigestQueryParameter.ABILITATO;
  4222.         }
  4223.     }
  4224.    
  4225.     public static final CachingRisposta buildCachingRisposta(ResponseCachingConfigurazione conf) {
  4226.         CachingRisposta ret = new CachingRisposta();
  4227.        
  4228.         if (conf == null) {
  4229.             ret.setStato(StatoDefaultRidefinitoEnum.DEFAULT);
  4230.             ret.setAbilitato(false);
  4231.             ret.setHashHeaders(null);
  4232.             ret.setHashPayload(null);
  4233.             ret.setHashRequestUri(null);
  4234.             ret.setHashAllQueryParameters(null);
  4235.             return ret;
  4236.         }
  4237.        
  4238.         ret.setAbilitato(conf.getStato() == StatoFunzionalita.ABILITATO);
  4239.         ret.setStato( conf.getStato() == StatoFunzionalita.ABILITATO
  4240.                 ? StatoDefaultRidefinitoEnum.RIDEFINITO
  4241.                 : StatoDefaultRidefinitoEnum.DEFAULT
  4242.             );
  4243.         ret.setCacheTimeoutSeconds(conf.getCacheTimeoutSeconds());
  4244.        
  4245.         if (ret.isAbilitato()) {
  4246.            
  4247.             ret.setMaxResponseSize( conf.getMaxMessageSize() != null);
  4248.             ret.setMaxResponseSizeKb( conf.getMaxMessageSize() );
  4249.            
  4250.             ResponseCachingConfigurazioneHashGenerator hashInfo = conf.getHashGenerator();
  4251.             if(hashInfo.getQueryParameters()!=null) {
  4252.                 switch (hashInfo.getQueryParameters()) {
  4253.                 case ABILITATO:
  4254.                     ret.setHashAllQueryParameters(true);
  4255.                     break;
  4256.                 case DISABILITATO:
  4257.                     ret.setHashAllQueryParameters(false);
  4258.                     break;
  4259.                 case SELEZIONE_PUNTUALE:
  4260.                     ret.setHashAllQueryParameters(false);
  4261.                     if(hashInfo.sizeQueryParameterList()>0) {
  4262.                         ret.setHashQueryParamaters(hashInfo.getQueryParameterList());
  4263.                     }
  4264.                     break;
  4265.                 }
  4266.             }
  4267.             if(StatoFunzionalita.ABILITATO.equals(hashInfo.getHeaders())) {
  4268.                 if(hashInfo.sizeHeaderList()>0) {
  4269.                     ret.setHashHeaders(hashInfo.getHeaderList());
  4270.                 }
  4271.             }
  4272.             ret.setHashPayload(Helper.statoFunzionalitaConfToBool(hashInfo.getPayload()));
  4273.             ret.setHashRequestUri(Helper.statoFunzionalitaConfToBool(hashInfo.getRequestUri()));
  4274.            
  4275.             if(conf.getControl()!=null) {
  4276.                 ret.setControlNoCache(conf.getControl().isNoCache());
  4277.                 ret.setControlMaxAge(conf.getControl().isMaxAge());
  4278.                 ret.setControlNoStore(conf.getControl().isNoStore());
  4279.             }
  4280.            
  4281.             if(conf.sizeRegolaList()>0) {
  4282.                 ret.setRegole(new ArrayList<CachingRispostaRegola>());
  4283.                
  4284.                 for (ResponseCachingConfigurazioneRegola regola : conf.getRegolaList()) {
  4285.                     CachingRispostaRegola cachingRispostaRegola = new CachingRispostaRegola();
  4286.                     if(regola.getReturnCodeMin()!=null) {
  4287.                         cachingRispostaRegola.setReturnCodeMin(regola.getReturnCodeMin());
  4288.                     }
  4289.                     if(regola.getReturnCodeMax()!=null) {
  4290.                         cachingRispostaRegola.setReturnCodeMax(regola.getReturnCodeMax());
  4291.                     }
  4292.                     cachingRispostaRegola.setFault(regola.isFault());
  4293.                     if(regola.getCacheTimeoutSeconds()!=null) {
  4294.                         cachingRispostaRegola.setCacheTimeoutSeconds(regola.getCacheTimeoutSeconds());
  4295.                     }
  4296.                     ret.addRegoleItem(cachingRispostaRegola);
  4297.                 }
  4298.             }
  4299.         }
  4300.        
  4301.         return ret;
  4302.     }


  4303.    
  4304.     @Deprecated
  4305.     public static final RuoloTipologia ruoloTipologiaFromAutorizzazione(final String autorizzazione) {
  4306.         RuoloTipologia tipoRuoloFonte = null;
  4307.         if (TipoAutorizzazione.isRolesRequired(autorizzazione)) {
  4308.             if ( TipoAutorizzazione.isExternalRolesRequired(autorizzazione) )
  4309.                 tipoRuoloFonte = RuoloTipologia.ESTERNO;
  4310.             else if ( TipoAutorizzazione.isInternalRolesRequired(autorizzazione))
  4311.                 tipoRuoloFonte = RuoloTipologia.INTERNO;
  4312.             else
  4313.                 tipoRuoloFonte = RuoloTipologia.QUALSIASI;              
  4314.         }
  4315.         return tipoRuoloFonte;
  4316.     }
  4317.    
  4318.    
  4319.     public static final boolean controlloAccessiCheckPD(FruizioniConfEnv env, PortaDelegata oldPd, PortaDelegata newPd) throws Exception {
  4320.         final BinaryParameter allegatoXacmlPolicy = new BinaryParameter();
  4321.        
  4322.         allegatoXacmlPolicy.setValue( BaseHelper.evalorElse(
  4323.                 () -> newPd.getXacmlPolicy(),
  4324.                 ""
  4325.                 ).getBytes()
  4326.             );
  4327.         RuoloTipologia tipoRuoloFonte = AutorizzazioneUtilities.convertToRuoloTipologia(TipoAutorizzazione.toEnumConstant(newPd.getAutorizzazione()));
  4328.         String stato_autorizzazione = null;
  4329.         if (TipoAutorizzazione.toEnumConstant(newPd.getAutorizzazione()) != null) {
  4330.             stato_autorizzazione = AutorizzazioneUtilities.convertToStato(newPd.getAutorizzazione());
  4331.         }
  4332.        
  4333.         boolean tokenAbilitato = newPd.getGestioneToken() != null;
  4334.         boolean autorizzazioneScope = newPd.getScope() != null;
  4335.        
  4336.         if ( autorizzazioneScope && !tokenAbilitato ) {
  4337.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione per scope richiede una token policy abilitata");
  4338.         }
  4339.        
  4340.         TipoAutenticazionePrincipal autenticazionePrincipal = env.pdCore.getTipoAutenticazionePrincipal(newPd.getProprietaAutenticazioneList());
  4341.         List<String> autenticazioneParametroList = env.pdCore.getParametroAutenticazione(newPd.getAutenticazione(), newPd.getProprietaAutenticazioneList());
  4342.            
  4343.         String autorizzazioneContenutiStato = null;
  4344.         String autorizzazioneContenuti = newPd.getAutorizzazioneContenuto();
  4345.         String autorizzazioneContenutiProperties = null;
  4346.         if(autorizzazioneContenuti == null) {
  4347.             autorizzazioneContenutiStato = StatoFunzionalita.DISABILITATO.getValue();
  4348.         } else if(autorizzazioneContenuti.equals(CostantiAutorizzazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN)) {
  4349.             autorizzazioneContenutiStato = StatoFunzionalita.ABILITATO.getValue();
  4350.             List<Proprieta> proprietaAutorizzazioneContenutoList = newPd.getProprietaAutorizzazioneContenutoList();
  4351.             StringBuilder sb = new StringBuilder();
  4352.             for (Proprieta proprieta : proprietaAutorizzazioneContenutoList) {
  4353.                 if(sb.length() >0)
  4354.                     sb.append("\n");
  4355.                
  4356.                 sb.append(proprieta.getNome()).append("=").append(proprieta.getValore());
  4357.             }                      
  4358.            
  4359.             autorizzazioneContenutiProperties = sb.toString();
  4360.         } else { // custom
  4361.             autorizzazioneContenutiStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_CONTROLLO_ACCESSI_AUTORIZZAZIONE_CONTENUTI_STATO_CUSTOM;
  4362.         }
  4363.        
  4364.         String identificazioneAttributiStato = newPd.sizeAttributeAuthorityList()>0 ? StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue();
  4365.         String [] attributeAuthoritySelezionate = null;
  4366.         String attributeAuthorityAttributi = null;
  4367.         if(newPd.sizeAttributeAuthorityList()>0) {
  4368.             List<String> l = new ArrayList<>();
  4369.             for (AttributeAuthority aa : newPd.getAttributeAuthorityList()) {
  4370.                 l.add(aa.getNome());
  4371.             }
  4372.             attributeAuthoritySelezionate = l.toArray(new String[1]);
  4373.             attributeAuthorityAttributi = env.apsCore.buildAttributesStringFromAuthority(newPd.getAttributeAuthorityList());
  4374.         }
  4375.        
  4376.         String autorizzazioneAutenticatiToken = null;
  4377.         String autorizzazioneRuoliToken = null;
  4378.         if(newPd.getAutorizzazioneToken()!=null) {
  4379.             autorizzazioneAutenticatiToken = ServletUtils.boolToCheckBoxStatus(StatoFunzionalita.ABILITATO.equals(newPd.getAutorizzazioneToken().getAutorizzazioneApplicativi()));
  4380.             autorizzazioneRuoliToken = ServletUtils.boolToCheckBoxStatus(StatoFunzionalita.ABILITATO.equals(newPd.getAutorizzazioneToken().getAutorizzazioneRuoli()));
  4381.         }
  4382.        
  4383.         return env.paHelper.controlloAccessiCheck(
  4384.                 TipoOperazione.OTHER,
  4385.                 newPd.getAutenticazione(),              // Autenticazione
  4386.                 ServletUtils.boolToCheckBoxStatus( Helper.statoFunzionalitaConfToBool( newPd.getAutenticazioneOpzionale() ) ),      // Autenticazione Opzionale
  4387.                 autenticazionePrincipal,
  4388.                 autenticazioneParametroList,
  4389.                 stato_autorizzazione,              
  4390.                 ServletUtils.boolToCheckBoxStatus( TipoAutorizzazione.isAuthenticationRequired(newPd.getAutorizzazione()) ),
  4391.                 ServletUtils.boolToCheckBoxStatus( TipoAutorizzazione.isRolesRequired(newPd.getAutorizzazione()) ),
  4392.                 evalnull( () -> tipoRuoloFonte.toString() ),
  4393.                 evalnull( () -> newPd.getRuoli().getMatch().toString() ),
  4394.                 env.isSupportatoAutenticazioneSoggetti,
  4395.                 true,       // isPortaDelegata,
  4396.                 oldPd,
  4397.                 evalnull( () ->
  4398.                         newPd.getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList())
  4399.                     ),
  4400.                 Helper.boolToStatoFunzionalita(tokenAbilitato).getValue(),
  4401.                 evalnull( () -> newPd.getGestioneToken().getPolicy() ),
  4402.                 evalnull( () -> newPd.getGestioneToken().getValidazione().toString() ),
  4403.                 evalnull( () -> newPd.getGestioneToken().getIntrospection().toString() ),
  4404.                 evalnull( () -> newPd.getGestioneToken().getUserInfo().toString() ),
  4405.                 evalnull( () -> newPd.getGestioneToken().getForward().toString() ),
  4406.                 autorizzazioneAutenticatiToken,
  4407.                 autorizzazioneRuoliToken,
  4408.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( newPd.getGestioneToken().getOptions() != null ) ),
  4409.                 evalnull( () -> newPd.getGestioneToken().getOptions() ),
  4410.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( autorizzazioneScope ) ),
  4411.                 evalnull( () -> newPd.getScope().getMatch().toString() ),
  4412.                 allegatoXacmlPolicy,
  4413.                 autorizzazioneContenutiStato, autorizzazioneContenuti, autorizzazioneContenutiProperties,
  4414.                 env.tipo_protocollo,
  4415.                 identificazioneAttributiStato, attributeAuthoritySelezionate, attributeAuthorityAttributi);
  4416.     }



  4417.     public static final boolean controlloAccessiCheckPA(ErogazioniConfEnv env, PortaApplicativa oldPa, PortaApplicativa newPa)
  4418.             throws Exception {
  4419.        
  4420.         final BinaryParameter allegatoXacmlPolicy = new BinaryParameter();
  4421.        
  4422.         allegatoXacmlPolicy.setValue( BaseHelper.evalorElse(
  4423.                 () -> newPa.getXacmlPolicy(),
  4424.                 ""
  4425.                 ).getBytes()
  4426.             );
  4427.         RuoloTipologia tipoRuoloFonte = AutorizzazioneUtilities.convertToRuoloTipologia(TipoAutorizzazione.toEnumConstant(newPa.getAutorizzazione()));
  4428.         String stato_autorizzazione = null;
  4429.         if (TipoAutorizzazione.toEnumConstant(newPa.getAutorizzazione()) != null) {
  4430.             stato_autorizzazione = AutorizzazioneUtilities.convertToStato(newPa.getAutorizzazione());
  4431.         }
  4432.        
  4433.         boolean tokenAbilitato = newPa.getGestioneToken() != null;
  4434.         boolean autorizzazioneScope = newPa.getScope() != null;
  4435.        
  4436.         if ( autorizzazioneScope && !tokenAbilitato ) {
  4437.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione per scope richiede una token policy abilitata");
  4438.         }
  4439.        
  4440.         TipoAutenticazionePrincipal autenticazionePrincipal = env.paCore.getTipoAutenticazionePrincipal(newPa.getProprietaAutenticazioneList());
  4441.         List<String> autenticazioneParametroList = env.paCore.getParametroAutenticazione(newPa.getAutenticazione(), newPa.getProprietaAutenticazioneList());
  4442.        
  4443.         String autorizzazioneContenutiStato = null;
  4444.         String autorizzazioneContenuti = newPa.getAutorizzazioneContenuto();
  4445.         String autorizzazioneContenutiProperties = null;
  4446.         if(autorizzazioneContenuti == null) {
  4447.             autorizzazioneContenutiStato = StatoFunzionalita.DISABILITATO.getValue();
  4448.         } else if(autorizzazioneContenuti.equals(CostantiAutorizzazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN)) {
  4449.             autorizzazioneContenutiStato = StatoFunzionalita.ABILITATO.getValue();
  4450.             List<Proprieta> proprietaAutorizzazioneContenutoList = newPa.getProprietaAutorizzazioneContenutoList();
  4451.             StringBuilder sb = new StringBuilder();
  4452.             for (Proprieta proprieta : proprietaAutorizzazioneContenutoList) {
  4453.                 if(sb.length() >0)
  4454.                     sb.append("\n");
  4455.                
  4456.                 sb.append(proprieta.getNome()).append("=").append(proprieta.getValore());
  4457.             }                      
  4458.            
  4459.             autorizzazioneContenutiProperties = sb.toString();
  4460.         } else { // custom
  4461.             autorizzazioneContenutiStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_CONTROLLO_ACCESSI_AUTORIZZAZIONE_CONTENUTI_STATO_CUSTOM;
  4462.         }
  4463.        
  4464.         String identificazioneAttributiStato = newPa.sizeAttributeAuthorityList()>0 ? StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue();
  4465.         String [] attributeAuthoritySelezionate = null;
  4466.         String attributeAuthorityAttributi = null;
  4467.         if(newPa.sizeAttributeAuthorityList()>0) {
  4468.             List<String> l = new ArrayList<>();
  4469.             for (AttributeAuthority aa : newPa.getAttributeAuthorityList()) {
  4470.                 l.add(aa.getNome());
  4471.             }
  4472.             attributeAuthoritySelezionate = l.toArray(new String[1]);
  4473.             attributeAuthorityAttributi = env.apsCore.buildAttributesStringFromAuthority(newPa.getAttributeAuthorityList());
  4474.         }
  4475.        
  4476.         String autorizzazioneAutenticatiToken = null;
  4477.         String autorizzazioneRuoliToken = null;
  4478.         if(newPa.getAutorizzazioneToken()!=null) {
  4479.             autorizzazioneAutenticatiToken = ServletUtils.boolToCheckBoxStatus(StatoFunzionalita.ABILITATO.equals(newPa.getAutorizzazioneToken().getAutorizzazioneApplicativi()));
  4480.             autorizzazioneRuoliToken = ServletUtils.boolToCheckBoxStatus(StatoFunzionalita.ABILITATO.equals(newPa.getAutorizzazioneToken().getAutorizzazioneRuoli()));
  4481.         }
  4482.        
  4483.         return env.paHelper.controlloAccessiCheck(
  4484.                 TipoOperazione.OTHER,
  4485.                 newPa.getAutenticazione(),              // Autenticazione
  4486.                 ServletUtils.boolToCheckBoxStatus( Helper.statoFunzionalitaConfToBool( newPa.getAutenticazioneOpzionale() ) ),      // Autenticazione Opzionale
  4487.                 autenticazionePrincipal,
  4488.                 autenticazioneParametroList,
  4489.                 stato_autorizzazione,              
  4490.                 ServletUtils.boolToCheckBoxStatus( TipoAutorizzazione.isAuthenticationRequired(newPa.getAutorizzazione()) ),
  4491.                 ServletUtils.boolToCheckBoxStatus( TipoAutorizzazione.isRolesRequired(newPa.getAutorizzazione()) ),
  4492.                 evalnull( () -> tipoRuoloFonte.toString() ),
  4493.                 evalnull( () -> newPa.getRuoli().getMatch().toString() ),
  4494.                 env.isSupportatoAutenticazioneSoggetti,
  4495.                 false,      // isPortaDelegata,
  4496.                 oldPa,
  4497.                 evalnull( () ->
  4498.                         newPa.getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList())
  4499.                     ),
  4500.                 Helper.boolToStatoFunzionalita(tokenAbilitato).getValue(),  // gestioneToken
  4501.                 evalnull( () -> newPa.getGestioneToken().getPolicy() ),     // policy
  4502.                 evalnull( () -> newPa.getGestioneToken().getValidazione().toString() ), // validazioneInput
  4503.                 evalnull( () -> newPa.getGestioneToken().getIntrospection().toString() ), // introspection
  4504.                 evalnull( () -> newPa.getGestioneToken().getUserInfo().toString() ),        // userInfo
  4505.                 evalnull( () -> newPa.getGestioneToken().getForward().toString() ),     // forward
  4506.                 autorizzazioneAutenticatiToken,
  4507.                 autorizzazioneRuoliToken,
  4508.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( newPa.getGestioneToken().getOptions() != null ) ),   // autorizzazioneToken
  4509.                 evalnull( () -> newPa.getGestioneToken().getOptions() ),
  4510.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( autorizzazioneScope ) ),
  4511.                 evalnull( () -> newPa.getScope().getMatch().toString() ),
  4512.                 allegatoXacmlPolicy,
  4513.                 autorizzazioneContenutiStato, autorizzazioneContenuti, autorizzazioneContenutiProperties,
  4514.                 env.tipo_protocollo,
  4515.                 identificazioneAttributiStato, attributeAuthoritySelezionate, attributeAuthorityAttributi);
  4516.        
  4517.     }
  4518.    
  4519.     public static final void fillPortaDelegata(ControlloAccessiAutorizzazione body, final PortaDelegata newPd) {
  4520.         final OneOfControlloAccessiAutorizzazioneAutorizzazione authz = body.getAutorizzazione();
  4521.        
  4522.         newPd.setXacmlPolicy(null);
  4523.        
  4524.         switch (authz.getTipo()) {
  4525.         case DISABILITATO: {
  4526.            
  4527.             final String tipoAutorString = TipoAutorizzazione.DISABILITATO.toString();
  4528.             newPd.setRuoli(null);
  4529.             newPd.setScope(null);
  4530.             newPd.setAutorizzazione(tipoAutorString);
  4531.             break;
  4532.         }
  4533.         case ABILITATO: {
  4534.            
  4535.             if(! (authz instanceof APIImplAutorizzazioneAbilitata)) {
  4536.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4537.             }
  4538.             APIImplAutorizzazioneAbilitata authzAbilitata = (APIImplAutorizzazioneAbilitata) authz;

  4539.            
  4540.             // defaults
  4541.             if ( authzAbilitata.isRuoli() && authzAbilitata.getRuoliFonte() == null ) {
  4542.                 authzAbilitata.setRuoliFonte(FonteEnum.QUALSIASI);
  4543.             }
  4544.            
  4545.             final String autorizzazione = AutorizzazioneUtilities.STATO_ABILITATO;
  4546.            
  4547.             final String autorizzazioneAutenticati = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isRichiedente());
  4548.            
  4549.             final String autorizzazioneRuoli = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isRuoli());
  4550.             final RuoloTipologia tipoRuoloFonte = Enums.ruoloTipologiaFromRest.get(authzAbilitata.getRuoliFonte());
  4551.             RuoloTipoMatch tipoRuoloMatch = null;
  4552.             if(authzAbilitata.getRuoliRichiesti()!=null) {
  4553.                 tipoRuoloMatch = RuoloTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getRuoliRichiesti().toString()) );   // Gli enum coincidono
  4554.             }
  4555.            
  4556.             final String autorizzazioneTokenAutenticati = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isTokenRichiedente());
  4557.            
  4558.             final String autorizzazioneTokenRuoli = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isTokenRuoli());
  4559.             final org.openspcoop2.core.config.constants.RuoloTipologia tipoTokenRuoloFonte = Enums.ruoloTipologiaConfigFromRest.get(authzAbilitata.getTokenRuoliFonte());
  4560.             RuoloTipoMatch tipoTokenRuoloMatch = null;
  4561.             if(authzAbilitata.getTokenRuoliRichiesti()!=null) {
  4562.                 tipoTokenRuoloMatch = RuoloTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getTokenRuoliRichiesti().toString()) ); // Gli enum coincidono
  4563.             }
  4564.            
  4565.             final String autorizzazioneScope = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isScope());
  4566.             final ScopeTipoMatch scopeTipoMatch = ScopeTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getScopeRichiesti().toString()) );
  4567.            
  4568.             String autorizzazione_tokenOptions = null;
  4569.             if(authzAbilitata.getTokenClaims()!=null && !authzAbilitata.getTokenClaims().isEmpty()) {
  4570.                 autorizzazione_tokenOptions = String.join("\n", authzAbilitata.getTokenClaims());
  4571.             }
  4572.            
  4573.            
  4574.             final String tipoAutorString =  AutorizzazioneUtilities.convertToTipoAutorizzazioneAsString(autorizzazione,
  4575.                     ServletUtils.isCheckBoxEnabled(autorizzazioneAutenticati), ServletUtils.isCheckBoxEnabled(autorizzazioneRuoli),
  4576.                     ServletUtils.isCheckBoxEnabled(autorizzazioneTokenAutenticati), ServletUtils.isCheckBoxEnabled(autorizzazioneTokenRuoli),      
  4577.                     ServletUtils.isCheckBoxEnabled(autorizzazioneScope),        
  4578.                     autorizzazione_tokenOptions,                    // Questo è il token claims
  4579.                     tipoRuoloFonte                                  // RuoliFonte: Qualsiasi, Registro, Esterna
  4580.                 );
  4581.            
  4582.             newPd.setAutorizzazione(tipoAutorString);
  4583.            
  4584.             if ( authzAbilitata.isRuoli() ) {
  4585.                 if ( newPd.getRuoli() == null) newPd.setRuoli(new AutorizzazioneRuoli());
  4586.                
  4587.                 newPd.getRuoli().setMatch(tipoRuoloMatch);
  4588.             } else {
  4589.                 newPd.setRuoli(null);
  4590.             }
  4591.            
  4592.             if(authzAbilitata.isTokenRichiedente() || authzAbilitata.isTokenRuoli()) {
  4593.                 newPd.setAutorizzazioneToken(new PortaDelegataAutorizzazioneToken());
  4594.                
  4595.                 if(authzAbilitata.isTokenRichiedente()) {
  4596.                     newPd.getAutorizzazioneToken().setAutorizzazioneApplicativi(StatoFunzionalita.ABILITATO);
  4597.                 }
  4598.                
  4599.                 if(authzAbilitata.isTokenRuoli()) {
  4600.                     newPd.getAutorizzazioneToken().setAutorizzazioneRuoli(StatoFunzionalita.ABILITATO);
  4601.                     newPd.getAutorizzazioneToken().setTipologiaRuoli(tipoTokenRuoloFonte);
  4602.                     if(newPd.getAutorizzazioneToken().getRuoli()==null) {
  4603.                         newPd.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  4604.                     }
  4605.                     newPd.getAutorizzazioneToken().getRuoli().setMatch(tipoTokenRuoloMatch);
  4606.                 }
  4607.             }
  4608.            
  4609.             if ( authzAbilitata.isScope() ) {
  4610.                 if ( newPd.getScope() == null ) newPd.setScope(new AutorizzazioneScope());
  4611.                
  4612.                 newPd.getScope().setMatch(scopeTipoMatch);
  4613.                 newPd.getScope().setStato(StatoFunzionalita.ABILITATO);
  4614.             } else {
  4615.                 newPd.setScope(null);
  4616.             }
  4617.            
  4618.            
  4619.             if ( authzAbilitata.isToken() ) {
  4620.                 if ( newPd.getGestioneToken() == null ) {
  4621.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessun token configurato per l'erogazione");
  4622.                 }
  4623.                 newPd.getGestioneToken().setOptions(autorizzazione_tokenOptions);
  4624.             }
  4625.             else {
  4626.                 BaseHelper.runNull( () -> newPd.getGestioneToken().setOptions(null) );
  4627.             }
  4628.             break;
  4629.         }
  4630.         case XACML_POLICY: {
  4631.            
  4632.             if(! (authz instanceof APIImplAutorizzazioneXACML)) {
  4633.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4634.             }
  4635.             APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  4636.            
  4637.             if (authzXacml.getPolicy() == null) {
  4638.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Campo obbligatorio 'policy' non presente nell'autorizzazione indicata");
  4639.             }
  4640.            
  4641.             if (authzXacml.getRuoliFonte() == null)
  4642.                 authzXacml.setRuoliFonte(FonteEnum.QUALSIASI);
  4643.            
  4644.             final RuoloTipologia tipoRuoloFonte = Enums.ruoloTipologiaFromRest.get(authzXacml.getRuoliFonte());
  4645.            
  4646.             final String tipoAutorString =  AutorizzazioneUtilities.convertToTipoAutorizzazioneAsString(TipoAutorizzazioneEnum.XACML_POLICY.toString(),
  4647.                     false,false,
  4648.                     false,false,
  4649.                     false,
  4650.                     "",
  4651.                     tipoRuoloFonte                                  // RuoliFonte: Qualsiasi, Registro, Esterna
  4652.                 );
  4653.            
  4654.             newPd.setAutorizzazione(tipoAutorString);
  4655.             newPd.setXacmlPolicy( evalnull( () -> new String(authzXacml.getPolicy())));            
  4656.             break;
  4657.         }
  4658.         case CUSTOM:
  4659.            
  4660.             if(! (authz instanceof APIImplAutorizzazioneCustom)) {
  4661.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4662.             }
  4663.             APIImplAutorizzazioneCustom authzACustom = (APIImplAutorizzazioneCustom) authz;
  4664.            
  4665.             if (StringUtils.isEmpty(authzACustom.getNome())) {
  4666.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(APIImplAutorizzazioneCustom.class.getName()+": Indicare il campo obbligatorio 'nome' ");
  4667.             }
  4668.             newPd.setAutorizzazione(authzACustom.getNome());
  4669.             break;
  4670.         }  
  4671.     }



  4672.     public static final void fillPortaApplicativa(ControlloAccessiAutorizzazione body, final PortaApplicativa newPa) {
  4673.         final OneOfControlloAccessiAutorizzazioneAutorizzazione authz = body.getAutorizzazione();
  4674.        
  4675.         newPa.setXacmlPolicy(null);

  4676.         switch (authz.getTipo()) {
  4677.         case DISABILITATO: {
  4678.            
  4679.             final String tipoAutorString = TipoAutorizzazione.DISABILITATO.toString();
  4680.             newPa.setSoggetti(null);
  4681.             newPa.setRuoli(null);
  4682.             newPa.setScope(null);
  4683.             newPa.setAutorizzazione(tipoAutorString);
  4684.             break;
  4685.         }
  4686.        
  4687.        
  4688.         case ABILITATO: {
  4689.             if(! (authz instanceof APIImplAutorizzazioneAbilitata)) {
  4690.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4691.             }
  4692.             APIImplAutorizzazioneAbilitata authzAbilitata = (APIImplAutorizzazioneAbilitata) authz;
  4693.            
  4694.             // defaults
  4695.             if ( authzAbilitata.isRuoli() && authzAbilitata.getRuoliFonte() == null ) {
  4696.                 authzAbilitata.setRuoliFonte(FonteEnum.QUALSIASI);
  4697.             }
  4698.            
  4699.             final String statoAutorizzazione = AutorizzazioneUtilities.STATO_ABILITATO;
  4700.            
  4701.             final String autorizzazioneAutenticati = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isRichiedente());
  4702.            
  4703.             final String autorizzazioneRuoli = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isRuoli());
  4704.             final RuoloTipologia tipoRuoloFonte = Enums.ruoloTipologiaFromRest.get(authzAbilitata.getRuoliFonte());
  4705.             RuoloTipoMatch tipoRuoloMatch = null;
  4706.             if(authzAbilitata.getRuoliRichiesti()!=null) {
  4707.                 tipoRuoloMatch = RuoloTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getRuoliRichiesti().toString()) );   // Gli enum coincidono
  4708.             }
  4709.            
  4710.             final String autorizzazioneTokenAutenticati = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isTokenRichiedente());
  4711.            
  4712.             final String autorizzazioneTokenRuoli = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isTokenRuoli());
  4713.             final org.openspcoop2.core.config.constants.RuoloTipologia tipoTokenRuoloFonte = Enums.ruoloTipologiaConfigFromRest.get(authzAbilitata.getTokenRuoliFonte());
  4714.             RuoloTipoMatch tipoTokenRuoloMatch = null;
  4715.             if(authzAbilitata.getTokenRuoliRichiesti()!=null) {
  4716.                 tipoTokenRuoloMatch = RuoloTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getTokenRuoliRichiesti().toString()) ); // Gli enum coincidono
  4717.             }
  4718.            
  4719.             final String autorizzazioneScope = ServletUtils.boolToCheckBoxStatus(authzAbilitata.isScope());
  4720.             final ScopeTipoMatch scopeTipoMatch = ScopeTipoMatch.toEnumConstant( evalnull( () -> authzAbilitata.getScopeRichiesti().toString()) );
  4721.            
  4722.             String autorizzazione_tokenOptions = null;
  4723.             if(authzAbilitata.getTokenClaims()!=null && !authzAbilitata.getTokenClaims().isEmpty()) {
  4724.                 autorizzazione_tokenOptions = String.join("\n", authzAbilitata.getTokenClaims());
  4725.             }
  4726.            
  4727.             final String tipoAutorString =  AutorizzazioneUtilities.convertToTipoAutorizzazioneAsString(statoAutorizzazione,
  4728.                     ServletUtils.isCheckBoxEnabled(autorizzazioneAutenticati), ServletUtils.isCheckBoxEnabled(autorizzazioneRuoli),    
  4729.                     ServletUtils.isCheckBoxEnabled(autorizzazioneTokenAutenticati), ServletUtils.isCheckBoxEnabled(autorizzazioneTokenRuoli),      
  4730.                     ServletUtils.isCheckBoxEnabled(autorizzazioneScope),        
  4731.                     autorizzazione_tokenOptions,                    // Questo è il token claims
  4732.                     tipoRuoloFonte                                  // RuoliFonte: Qualsiasi, Registro, Esterna
  4733.                 );
  4734.            
  4735.             newPa.setAutorizzazione(tipoAutorString);
  4736.            
  4737.             if ( authzAbilitata.isRuoli() ) {
  4738.                 if ( newPa.getRuoli() == null) newPa.setRuoli(new AutorizzazioneRuoli());
  4739.                
  4740.                 newPa.getRuoli().setMatch(tipoRuoloMatch);
  4741.             } else {
  4742.                 newPa.setRuoli(null);
  4743.             }
  4744.            
  4745.             if(authzAbilitata.isTokenRichiedente() || authzAbilitata.isTokenRuoli()) {
  4746.                 newPa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  4747.                
  4748.                 if(authzAbilitata.isTokenRichiedente()) {
  4749.                     newPa.getAutorizzazioneToken().setAutorizzazioneApplicativi(StatoFunzionalita.ABILITATO);
  4750.                 }
  4751.                
  4752.                 if(authzAbilitata.isTokenRuoli()) {
  4753.                     newPa.getAutorizzazioneToken().setAutorizzazioneRuoli(StatoFunzionalita.ABILITATO);
  4754.                     newPa.getAutorizzazioneToken().setTipologiaRuoli(tipoTokenRuoloFonte);
  4755.                     if(newPa.getAutorizzazioneToken().getRuoli()==null) {
  4756.                         newPa.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  4757.                     }
  4758.                     newPa.getAutorizzazioneToken().getRuoli().setMatch(tipoTokenRuoloMatch);
  4759.                 }
  4760.             } else if (!authzAbilitata.isTokenRichiedente().booleanValue() && !authzAbilitata.isTokenRuoli().booleanValue() && authzAbilitata.isToken().booleanValue()) {
  4761.                 newPa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  4762.             } else {
  4763.                 newPa.setAutorizzazioneToken(null);
  4764.             }
  4765.            
  4766.             if ( authzAbilitata.isScope() ) {
  4767.                 if ( newPa.getScope() == null ) newPa.setScope(new AutorizzazioneScope());
  4768.                
  4769.                 newPa.getScope().setMatch(scopeTipoMatch);
  4770.                 newPa.getScope().setStato(StatoFunzionalita.ABILITATO);
  4771.             } else {
  4772.                 newPa.setScope(null);
  4773.             }
  4774.            
  4775.            
  4776.             if ( authzAbilitata.isToken() ) {
  4777.                 if ( newPa.getGestioneToken() == null ) {
  4778.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessun token configurato per l'erogazione");
  4779.                 }
  4780.                 newPa.getGestioneToken().setOptions(autorizzazione_tokenOptions);
  4781.             }
  4782.             else {
  4783.                 BaseHelper.runNull( () -> newPa.getGestioneToken().setOptions(null) );
  4784.             }
  4785.             break;
  4786.         }
  4787.         case XACML_POLICY: {
  4788.            
  4789.             if(! (authz instanceof APIImplAutorizzazioneXACML)) {
  4790.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4791.             }
  4792.             APIImplAutorizzazioneXACML authzXacml = (APIImplAutorizzazioneXACML) authz;
  4793.            
  4794.             if (authzXacml.getPolicy() == null) {
  4795.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Campo obbligatorio 'policy' non presente nell'autorizzazione indicata");
  4796.             }
  4797.            
  4798.             if (authzXacml.getRuoliFonte() == null)
  4799.                 authzXacml.setRuoliFonte(FonteEnum.QUALSIASI);
  4800.            
  4801.             final RuoloTipologia tipoRuoloFonte = Enums.ruoloTipologiaFromRest.get(authzXacml.getRuoliFonte());
  4802.            
  4803.             final String tipoAutorString =  AutorizzazioneUtilities.convertToTipoAutorizzazioneAsString(AutorizzazioneUtilities.STATO_XACML_POLICY,
  4804.                     false,false,        
  4805.                     false,false,        
  4806.                     false,
  4807.                     "",
  4808.                     tipoRuoloFonte                                  // RuoliFonte: Qualsiasi, Registro, Esterna
  4809.                 );
  4810.            
  4811.            
  4812.             newPa.setAutorizzazione(tipoAutorString);
  4813.             newPa.setXacmlPolicy( evalnull( () -> new String(authzXacml.getPolicy())));            
  4814.             break;
  4815.         }
  4816.         case CUSTOM:
  4817.            
  4818.             if(! (authz instanceof APIImplAutorizzazioneCustom)) {
  4819.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione dell'autorizzazione '"+authz.getClass().getName()+"' non compatibile con il tipo impostato '"+authz.getTipo()+"'");
  4820.             }
  4821.             APIImplAutorizzazioneCustom authzACustom = (APIImplAutorizzazioneCustom) authz;
  4822.            
  4823.             if (StringUtils.isEmpty(authzACustom.getNome())) {
  4824.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(APIImplAutorizzazioneCustom.class.getName()+": Indicare il campo obbligatorio 'nome' ");
  4825.             }
  4826.             newPa.setAutorizzazione(authzACustom.getNome());
  4827.             break;
  4828.         }
  4829.     }
  4830.    
  4831.    



  4832.     public static final TipoAutorizzazioneEnum getTipoAutorizzazione(final String tipo_autorizzazione_pa) {
  4833.         TipoAutorizzazioneEnum tipoAuthz = null;
  4834.        
  4835.         if (TipoAutorizzazione.toEnumConstant(tipo_autorizzazione_pa) == null) {
  4836.             tipoAuthz = TipoAutorizzazioneEnum.CUSTOM;
  4837.         } else {
  4838.             String stato_auth = AutorizzazioneUtilities.convertToStato(tipo_autorizzazione_pa);
  4839.            
  4840.             if (AutorizzazioneUtilities.STATO_ABILITATO.equals(stato_auth))
  4841.                 tipoAuthz = TipoAutorizzazioneEnum.ABILITATO;
  4842.            
  4843.             else if ( AutorizzazioneUtilities.STATO_DISABILITATO.equals(stato_auth) )
  4844.                 tipoAuthz = TipoAutorizzazioneEnum.DISABILITATO;
  4845.            
  4846.             else if ( AutorizzazioneUtilities.STATO_XACML_POLICY.equals(stato_auth) )
  4847.                 tipoAuthz = TipoAutorizzazioneEnum.XACML_POLICY;
  4848.             else
  4849.                 throw FaultCode.ERRORE_INTERNO.toException("Stato autorizzazione " + stato_auth + " sconosciuto");
  4850.         }
  4851.         return tipoAuthz;
  4852.     }



  4853.     public static final ControlloAccessiAutorizzazioneView controlloAccessiAutorizzazioneFromPA(final PortaApplicativa pa) {
  4854.         ControlloAccessiAutorizzazioneView ret = new ControlloAccessiAutorizzazioneView();
  4855.        
  4856.         TipoAutorizzazioneEnum tipoAuthz = getTipoAutorizzazione(pa.getAutorizzazione());      
  4857.    
  4858.         OneOfControlloAccessiAutorizzazioneViewAutorizzazione retAuthz = null;
  4859.        
  4860.         switch ( tipoAuthz ) {
  4861.         case ABILITATO: {
  4862.             APIImplAutorizzazioneAbilitata authzAbilitata = new APIImplAutorizzazioneAbilitata();
  4863.             authzAbilitata.setTipo(tipoAuthz);
  4864.             retAuthz = authzAbilitata;
  4865.            
  4866.             authzAbilitata.setRichiedente(TipoAutorizzazione.isAuthenticationRequired(pa.getAutorizzazione()));
  4867.            
  4868.             authzAbilitata.setRuoli( TipoAutorizzazione.isRolesRequired(pa.getAutorizzazione()) );
  4869.             if (authzAbilitata.isRuoli()) {
  4870.            
  4871.                 authzAbilitata.setRuoliRichiesti( evalnull(  () -> AllAnyEnum.fromValue( pa.getRuoli().getMatch().toString()) ) );
  4872.                 authzAbilitata.setRuoliFonte( evalnull( () ->
  4873.                         Enums.registroTipologiaToApiFonte(  AutorizzazioneUtilities.convertToRuoloTipologia(pa.getAutorizzazione()) )
  4874.                     ));
  4875.             }
  4876.            
  4877.             if(pa.getAutorizzazioneToken()!=null) {
  4878.                 if(StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneApplicativi())) {
  4879.                     authzAbilitata.setTokenRichiedente(true);
  4880.                 }
  4881.                
  4882.                 if(StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneRuoli())) {
  4883.                     authzAbilitata.setTokenRuoli(true);
  4884.                    
  4885.                     authzAbilitata.setTokenRuoliRichiesti( evalnull(  () -> AllAnyEnum.fromValue( pa.getAutorizzazioneToken().getRuoli().getMatch().toString()) ) );
  4886.                     if(pa.getAutorizzazioneToken().getTipologiaRuoli()!=null) {
  4887.                         switch (pa.getAutorizzazioneToken().getTipologiaRuoli()) {
  4888.                         case INTERNO:
  4889.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.REGISTRO);
  4890.                             break;
  4891.                         case ESTERNO:
  4892.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.ESTERNA);                      
  4893.                             break;
  4894.                         case QUALSIASI:
  4895.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.QUALSIASI);
  4896.                             break;
  4897.                         }
  4898.                     }
  4899.                 }
  4900.             }
  4901.            
  4902.             authzAbilitata.setScope( pa.getScope() != null );
  4903.             authzAbilitata.setScopeRichiesti( evalnull( () -> AllAnyEnum.fromValue( pa.getScope().getMatch().getValue() )));
  4904.            
  4905.             authzAbilitata.setToken( (pa.getGestioneToken()!=null && pa.getGestioneToken().getOptions() != null) ? true : false);
  4906.            
  4907.             if(pa.getGestioneToken()!=null) {
  4908.                 String pString = pa.getGestioneToken().getOptions();
  4909.                 if(pString!=null) {
  4910.                     List<String> proprieta = new ArrayList<>();
  4911.                     String[] psplit = pString.split("\n");
  4912.                     for(String pr: psplit) {
  4913.                         proprieta.add(pr);
  4914.                     }
  4915.                     authzAbilitata.setTokenClaims(proprieta);
  4916.                 }
  4917.             }
  4918.            
  4919.             break;
  4920.         }
  4921.         case XACML_POLICY: {
  4922.             APIImplAutorizzazioneXACMLView authzXacml = new APIImplAutorizzazioneXACMLView();
  4923.             authzXacml.setTipo(tipoAuthz);
  4924.             retAuthz = authzXacml;
  4925.            
  4926.             authzXacml.setRuoliFonte( evalnull( () ->
  4927.                     Enums.registroTipologiaToApiFonte(  AutorizzazioneUtilities.convertToRuoloTipologia(pa.getAutorizzazione()) )
  4928.                 ));

  4929.             break;
  4930.         }
  4931.         case CUSTOM: {
  4932.             APIImplAutorizzazioneCustom authzCustom = new APIImplAutorizzazioneCustom();
  4933.             authzCustom.setTipo(tipoAuthz);
  4934.             retAuthz = authzCustom;
  4935.            
  4936.             authzCustom.setNome(pa.getAutorizzazione());

  4937.             break;
  4938.         }
  4939.         case DISABILITATO: {
  4940.             APIImplAutorizzazioneDisabilitata authzDisabilitata = new APIImplAutorizzazioneDisabilitata();
  4941.             authzDisabilitata.setTipo(tipoAuthz);
  4942.             retAuthz = authzDisabilitata;
  4943.            
  4944.             break;
  4945.         }
  4946.         }
  4947.        
  4948.         ret.setAutorizzazione(retAuthz);
  4949.         return ret;
  4950.     }
  4951.    
  4952.     public static final ControlloAccessiAutorizzazioneView controlloAccessiAutorizzazioneFromPD(final PortaDelegata pd) {
  4953.         ControlloAccessiAutorizzazioneView ret = new ControlloAccessiAutorizzazioneView();
  4954.        
  4955.         TipoAutorizzazioneEnum tipoAuthz = getTipoAutorizzazione(pd.getAutorizzazione());      
  4956.    
  4957.         OneOfControlloAccessiAutorizzazioneViewAutorizzazione retAuthz = null;
  4958.        
  4959.         switch ( tipoAuthz ) {
  4960.         case ABILITATO: {
  4961.             APIImplAutorizzazioneAbilitata authzAbilitata = new APIImplAutorizzazioneAbilitata();
  4962.             authzAbilitata.setTipo(tipoAuthz);
  4963.             retAuthz = authzAbilitata;
  4964.            
  4965.             authzAbilitata.setRichiedente( TipoAutorizzazione.isAuthenticationRequired(pd.getAutorizzazione()));
  4966.            
  4967.            
  4968.             authzAbilitata.setRuoli( TipoAutorizzazione.isRolesRequired(pd.getAutorizzazione()) );
  4969.             if (authzAbilitata.isRuoli()) {
  4970.                 authzAbilitata.setRuoliRichiesti( evalnull(  () -> AllAnyEnum.fromValue( pd.getRuoli().getMatch().toString()) ) );
  4971.                 authzAbilitata.setRuoliFonte( evalnull( () ->
  4972.                         Enums.registroTipologiaToApiFonte(  AutorizzazioneUtilities.convertToRuoloTipologia(pd.getAutorizzazione()) )
  4973.                     ));
  4974.             }
  4975.            
  4976.             if(pd.getAutorizzazioneToken()!=null) {
  4977.                 if(StatoFunzionalita.ABILITATO.equals(pd.getAutorizzazioneToken().getAutorizzazioneApplicativi())) {
  4978.                     authzAbilitata.setTokenRichiedente(true);
  4979.                 }
  4980.                
  4981.                 if(StatoFunzionalita.ABILITATO.equals(pd.getAutorizzazioneToken().getAutorizzazioneRuoli())) {
  4982.                     authzAbilitata.setTokenRuoli(true);
  4983.                    
  4984.                     authzAbilitata.setTokenRuoliRichiesti( evalnull(  () -> AllAnyEnum.fromValue( pd.getAutorizzazioneToken().getRuoli().getMatch().toString()) ) );
  4985.                     if(pd.getAutorizzazioneToken().getTipologiaRuoli()!=null) {
  4986.                         switch (pd.getAutorizzazioneToken().getTipologiaRuoli()) {
  4987.                         case INTERNO:
  4988.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.REGISTRO);
  4989.                             break;
  4990.                         case ESTERNO:
  4991.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.ESTERNA);                      
  4992.                             break;
  4993.                         case QUALSIASI:
  4994.                             authzAbilitata.setTokenRuoliFonte(FonteEnum.QUALSIASI);
  4995.                             break;
  4996.                         }
  4997.                     }
  4998.                 }
  4999.             }
  5000.            
  5001.             authzAbilitata.setScope( pd.getScope() != null );
  5002.             authzAbilitata.setScopeRichiesti( evalnull( () -> AllAnyEnum.fromValue( pd.getScope().getMatch().getValue() )));
  5003.            
  5004.             authzAbilitata.setToken( (pd.getGestioneToken()!=null && pd.getGestioneToken().getOptions() != null) ? true : false);
  5005.            
  5006.             if(pd.getGestioneToken()!=null) {
  5007.                 String pString = pd.getGestioneToken().getOptions();
  5008.                 if(pString!=null) {
  5009.                     List<String> proprieta = new ArrayList<>();
  5010.                     String[] psplit = pString.split("\n");
  5011.                     for(String pr: psplit) {
  5012.                         proprieta.add(pr);
  5013.                     }
  5014.                     authzAbilitata.setTokenClaims(proprieta);
  5015.                 }
  5016.             }
  5017.                
  5018.             break;
  5019.         }
  5020.         case XACML_POLICY: {
  5021.             APIImplAutorizzazioneXACMLView authzXacml = new APIImplAutorizzazioneXACMLView();
  5022.             authzXacml.setTipo(tipoAuthz);
  5023.             retAuthz = authzXacml;
  5024.            
  5025.             authzXacml.setRuoliFonte( evalnull( () ->
  5026.                     Enums.registroTipologiaToApiFonte(  AutorizzazioneUtilities.convertToRuoloTipologia(pd.getAutorizzazione()) )
  5027.                 ));

  5028.             break;
  5029.         }
  5030.         case CUSTOM: {
  5031.             APIImplAutorizzazioneCustom authzCustom = new APIImplAutorizzazioneCustom();
  5032.             authzCustom.setTipo(tipoAuthz);
  5033.             retAuthz = authzCustom;
  5034.            
  5035.             authzCustom.setNome(pd.getAutorizzazione());

  5036.             break;
  5037.         }
  5038.         case DISABILITATO: {
  5039.             APIImplAutorizzazioneDisabilitata authzDisabilitata = new APIImplAutorizzazioneDisabilitata();
  5040.             authzDisabilitata.setTipo(tipoAuthz);
  5041.             retAuthz = authzDisabilitata;
  5042.            
  5043.             break;
  5044.         }
  5045.         }
  5046.        
  5047.         ret.setAutorizzazione(retAuthz);
  5048.         return ret;
  5049.     }



  5050.     public static final void fillPortaApplicativa(final ErogazioniEnv env, ControlloAccessiAutenticazione body, final PortaApplicativa newPa) throws InstantiationException, IllegalAccessException {
  5051.         final OneOfControlloAccessiAutenticazioneAutenticazione auth = body.getAutenticazione();
  5052.         final BooleanNullable autenticazioneOpzionaleNullable = getAutenticazioneOpzionale(auth); // gestisce auth se null
  5053.        
  5054.         newPa.setAutenticazioneOpzionale( evalnull( () -> Helper.boolToStatoFunzionalitaConf(autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null)) );
  5055.         newPa.setAutenticazione( evalnull( () -> Enums.tipoAutenticazioneFromRest.get(auth.getTipo()).toString()) );
  5056.        
  5057.         TipoAutenticazionePrincipal autenticazionePrincipal = null;
  5058.         List<String> autenticazioneParametroList = null;
  5059.         if(auth!=null) {
  5060.             autenticazionePrincipal = getTipoAutenticazionePrincipal(auth);
  5061.             autenticazioneParametroList = getAutenticazioneParametroList(env, auth.getTipo(), auth);
  5062.         }
  5063.         List<Proprieta> proprietaAutenticazione = env.paCore.convertToAutenticazioneProprieta(newPa.getAutenticazione(), autenticazionePrincipal, autenticazioneParametroList);
  5064.         newPa.setProprietaAutenticazioneList(proprietaAutenticazione);
  5065.        
  5066.         // Imposto l'autenticazione custom
  5067.         if ( evalnull( () -> auth.getTipo() ) == TipoAutenticazioneEnum.CUSTOM) {
  5068.             if(auth!=null && auth instanceof APIImplAutenticazioneCustom) {
  5069.                 APIImplAutenticazioneCustom authnCustom = (APIImplAutenticazioneCustom) auth;
  5070.                 newPa.setAutenticazione(authnCustom.getNome());
  5071.             }
  5072.             else {
  5073.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione '"+(auth!=null ? auth.getTipo() : "null?")+"' non è correttamente definita (trovata configurazione '"+
  5074.                         (auth!=null ? auth.getClass().getName() : "null?")+"')"  );
  5075.             }
  5076.         }
  5077.         // Gestione Token
  5078.         final ControlloAccessiAutenticazioneToken gToken = body.getToken();
  5079.         if (gToken != null) {
  5080.             final boolean isGestioneToken = gToken.isClientId() || gToken.isEmail() || gToken.isIssuer() || gToken.isSubject() || gToken.isUsername();
  5081.            
  5082.             if (isGestioneToken) {
  5083.                 if(newPa.getGestioneToken() == null)
  5084.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La gestione token non è abilitata per il gruppo");
  5085.                
  5086.                 if(newPa.getGestioneToken().getAutenticazione()==null) {
  5087.                     newPa.getGestioneToken().setAutenticazione(new GestioneTokenAutenticazione());
  5088.                 }
  5089.                
  5090.                 newPa.getGestioneToken().getAutenticazione().setIssuer(Helper.boolToStatoFunzionalitaConf(gToken.isIssuer()));
  5091.                 newPa.getGestioneToken().getAutenticazione().setClientId(Helper.boolToStatoFunzionalitaConf(gToken.isClientId()));
  5092.                 newPa.getGestioneToken().getAutenticazione().setSubject(Helper.boolToStatoFunzionalitaConf(gToken.isSubject()));
  5093.                 newPa.getGestioneToken().getAutenticazione().setUsername(Helper.boolToStatoFunzionalitaConf(gToken.isUsername()));
  5094.                 newPa.getGestioneToken().getAutenticazione().setEmail(Helper.boolToStatoFunzionalitaConf(gToken.isEmail()));    
  5095.             }
  5096.         }
  5097.        
  5098.     }
  5099.    
  5100.    
  5101.     public static final void fillPortaDelegata(final ErogazioniEnv env, ControlloAccessiAutenticazione body, final PortaDelegata newPd) {
  5102.         final OneOfControlloAccessiAutenticazioneAutenticazione auth = body.getAutenticazione();
  5103.         final BooleanNullable autenticazioneOpzionaleNullable = getAutenticazioneOpzionale(auth); // gestisce auth se null
  5104.        
  5105.         newPd.setAutenticazioneOpzionale( evalnull( () -> Helper.boolToStatoFunzionalitaConf(autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null)) );
  5106.         newPd.setAutenticazione( evalnull( () -> Enums.tipoAutenticazioneFromRest.get(auth.getTipo()).toString()) );
  5107.        
  5108.         TipoAutenticazionePrincipal autenticazionePrincipal = null;
  5109.         List<String> autenticazioneParametroList = null;
  5110.         if(auth!=null) {
  5111.             autenticazionePrincipal = getTipoAutenticazionePrincipal(auth);
  5112.             autenticazioneParametroList = getAutenticazioneParametroList(env, auth.getTipo(), auth);
  5113.         }
  5114.         List<Proprieta> proprietaAutenticazione = env.paCore.convertToAutenticazioneProprieta(newPd.getAutenticazione(), autenticazionePrincipal, autenticazioneParametroList);
  5115.         newPd.setProprietaAutenticazioneList(proprietaAutenticazione);
  5116.        
  5117.         if ( evalnull( () -> auth.getTipo() ) == TipoAutenticazioneEnum.CUSTOM) {
  5118.             if(auth!=null && auth instanceof APIImplAutenticazioneCustom) {
  5119.                 APIImplAutenticazioneCustom authnCustom = (APIImplAutenticazioneCustom) auth;
  5120.                 newPd.setAutenticazione(authnCustom.getNome());
  5121.             }
  5122.             else {
  5123.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("La configurazione dell'autenticazione '"+(auth!=null ? auth.getTipo() : "null?")+"' non è correttamente definita (trovata configurazione '"+
  5124.                         (auth!=null ? auth.getClass().getName() : "null?")+"')"  );
  5125.             }
  5126.         }
  5127.         // Gestione Token
  5128.         final ControlloAccessiAutenticazioneToken gToken = body.getToken();
  5129.         if (gToken != null) {
  5130.             final boolean isGestioneToken = gToken.isClientId() || gToken.isEmail() || gToken.isIssuer() || gToken.isSubject() || gToken.isUsername();
  5131.    
  5132.             if (isGestioneToken) {
  5133.                 if(newPd.getGestioneToken() == null)
  5134.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("La gestione token non è abilitata per il gruppo");
  5135.                
  5136.                 if(newPd.getGestioneToken().getAutenticazione()==null) {
  5137.                     newPd.getGestioneToken().setAutenticazione(new GestioneTokenAutenticazione());
  5138.                 }
  5139.                
  5140.                 newPd.getGestioneToken().getAutenticazione().setIssuer(Helper.boolToStatoFunzionalitaConf(gToken.isIssuer()));
  5141.                 newPd.getGestioneToken().getAutenticazione().setClientId(Helper.boolToStatoFunzionalitaConf(gToken.isClientId()));
  5142.                 newPd.getGestioneToken().getAutenticazione().setSubject(Helper.boolToStatoFunzionalitaConf(gToken.isSubject()));
  5143.                 newPd.getGestioneToken().getAutenticazione().setUsername(Helper.boolToStatoFunzionalitaConf(gToken.isUsername()));
  5144.                 newPd.getGestioneToken().getAutenticazione().setEmail(Helper.boolToStatoFunzionalitaConf(gToken.isEmail()));
  5145.             }
  5146.         }
  5147.        
  5148.     }



  5149.     public static final IDSoggetto getIdReferente(APIImpl body, final ErogazioniEnv env)
  5150.             throws DriverRegistroServiziNotFound, DriverRegistroServiziException {
  5151.         IDSoggetto idReferente = null;
  5152.          
  5153.         if( env.apcCore.isSupportatoSoggettoReferente(env.tipo_protocollo) ){
  5154.             if ( body.getApiReferente() == null )
  5155.                 body.setApiReferente(env.idSoggetto.getNome());
  5156.            
  5157.             idReferente = new IDSoggetto(env.tipo_soggetto,body.getApiReferente());
  5158.         }
  5159.    
  5160.         else {
  5161.             idReferente = env.soggettiCore.getSoggettoOperativoDefault(env.userLogin,env.tipo_protocollo);
  5162.         }
  5163.         return idReferente;
  5164.     }



  5165.     public static final GestioneCors convert(final CorsConfigurazione paConf) {
  5166.         final GestioneCors ret = new GestioneCors();
  5167.        
  5168.         if (paConf != null) {
  5169.             ret.setTipo( Enums.dualizeMap(Enums.tipoGestioneCorsFromRest).get(paConf.getTipo()));
  5170.             ret.setRidefinito(true);
  5171.            
  5172.             if ( ret.getTipo() == TipoGestioneCorsEnum.GATEWAY ) {

  5173.                 GestioneCorsAccessControl opts = new GestioneCorsAccessControl();
  5174.                
  5175.                 opts.setAllAllowOrigins( Helper.statoFunzionalitaConfToBool( paConf.getAccessControlAllAllowOrigins() ));
  5176.                 opts.setAllAllowHeaders( Helper.statoFunzionalitaConfToBool( paConf.getAccessControlAllAllowHeaders() ));
  5177.                 opts.setAllAllowMethods( Helper.statoFunzionalitaConfToBool( paConf.getAccessControlAllAllowMethods() ));
  5178.                 opts.setAllowCredentials(  Helper.statoFunzionalitaConfToBool( paConf.getAccessControlAllowCredentials() ));
  5179.                 opts.setAllowHeaders( evalnull( () -> paConf.getAccessControlAllowHeaders().getHeaderList()) );
  5180.                 opts.setAllowMethods( evalnull( () ->
  5181.                         paConf.getAccessControlAllowMethods().getMethodList().stream().map(HttpMethodEnum::valueOf).collect(Collectors.toList())
  5182.                         ));
  5183.                 opts.setAllowOrigins( evalnull( () -> paConf.getAccessControlAllowOrigins().getOriginList()));  
  5184.                 opts.setExposeHeaders( evalnull( () -> paConf.getAccessControlExposeHeaders().getHeaderList()) );
  5185.                 if(paConf.getAccessControlMaxAge()!=null) {
  5186.                     opts.setMaxAge( true );
  5187.                     opts.setMaxAgeSeconds(paConf.getAccessControlMaxAge());
  5188.                 }
  5189.                
  5190.                 ret.setAccessControl(opts);
  5191.             }
  5192.            

  5193.         }
  5194.         else {
  5195.             ret.setRidefinito(false);
  5196.         }
  5197.         return ret;
  5198.     }
  5199.    
  5200.     // CONVERSIONI POLICY RAGGRUPPAMENTO
  5201.    
  5202.     public static final RateLimitingPolicyGroupBy convert( AttivazionePolicyRaggruppamento src, RateLimitingPolicyGroupBy dest ) {
  5203.        
  5204.         dest.setAzione(src.isAzione());
  5205.        
  5206.         if(src.isServizioApplicativoFruitore() || src.isFruitore() || src.isIdentificativoAutenticato()) {
  5207.             dest.setRichiedente(true);
  5208.         }
  5209.        
  5210.         if(src.getToken()!=null) {
  5211.             String [] tmp = src.getToken().split(",");
  5212.             if(tmp!=null && tmp.length>0) {
  5213.                 List<TokenClaimEnum> token = new ArrayList<>();
  5214.                 for (int i = 0; i < tmp.length; i++) {
  5215.                     TipoCredenzialeMittente tipo = null;
  5216.                     try {
  5217.                         tipo = TipoCredenzialeMittente.toEnumConstant(tmp[i], true);
  5218.                     }catch(Exception e) {
  5219.                         LoggerProperties.getLoggerCore().error(e.getMessage(),e);
  5220.                     }
  5221.                     if(tipo!=null) {
  5222.                         switch (tipo) {
  5223.                         case TOKEN_SUBJECT:
  5224.                             token.add(TokenClaimEnum.SUBJECT);
  5225.                             break;
  5226.                         case TOKEN_ISSUER:
  5227.                             token.add(TokenClaimEnum.ISSUER);
  5228.                             break;
  5229.                         case TOKEN_CLIENT_ID:
  5230.                             token.add(TokenClaimEnum.CLIENT_ID);
  5231.                             break;
  5232.                         case TOKEN_USERNAME:
  5233.                             token.add(TokenClaimEnum.USERNAME);
  5234.                             break;
  5235.                         case TOKEN_EMAIL:
  5236.                             token.add(TokenClaimEnum.EMAIL);
  5237.                             break;
  5238.                         default:
  5239.                             break;
  5240.                         }
  5241.                     }
  5242.                 }
  5243.                 dest.setToken(token);
  5244.             }
  5245.         }
  5246.        
  5247.         dest.setChiaveNome(src.getInformazioneApplicativaNome());
  5248.         dest.setChiaveTipo(
  5249.                 Enums.rateLimitingChiaveEnum.get( TipoFiltroApplicativo.toEnumConstant(src.getInformazioneApplicativaTipo()) )
  5250.             );
  5251.        
  5252.         return dest;
  5253.     }
  5254.    
  5255.    
  5256.    
  5257.     // CONVERSIONI POLICY FILTRO
  5258.    
  5259.     public static final RateLimitingPolicyFiltro  convert ( AttivazionePolicyFiltro src, RateLimitingPolicyFiltro dest ) {
  5260.        
  5261.         dest.setApplicativoFruitore( src.getServizioApplicativoFruitore() );
  5262.        
  5263.         if(src.getAzione()!=null && !"".equals(src.getAzione())) {
  5264.             String [] tmp = src.getAzione().split(",");
  5265.             if(tmp!=null && tmp.length>0) {
  5266.                 List<String> azione = new ArrayList<>();
  5267.                 for (int i = 0; i < tmp.length; i++) {
  5268.                     azione.add(tmp[i]);
  5269.                 }
  5270.                 dest.setAzione(azione);
  5271.             }
  5272.         }
  5273.        
  5274.         dest.setRuoloRichiedente(src.getRuoloFruitore());
  5275.        
  5276.         if(src.getTokenClaims()!=null && !"".equals(src.getTokenClaims())) {
  5277.             List<String> proprieta = new ArrayList<>();
  5278.             String[] psplit = src.getTokenClaims().split("\n");
  5279.             for(String pr: psplit) {
  5280.                 proprieta.add(pr);
  5281.             }
  5282.             dest.setTokenClaims(proprieta);
  5283.         }
  5284.        
  5285.         dest.setChiaveNome(src.getInformazioneApplicativaNome());
  5286.         dest.setChiaveTipo(
  5287.                 Enums.rateLimitingChiaveEnum.get( TipoFiltroApplicativo.toEnumConstant(src.getInformazioneApplicativaTipo()) )
  5288.             );
  5289.                
  5290.         dest.setFiltroChiaveValore(src.getInformazioneApplicativaValore());
  5291.        
  5292.         return dest;
  5293.     }
  5294.    
  5295.    
  5296.     public static final RateLimitingPolicyFiltroErogazione  convert ( AttivazionePolicyFiltro src, RateLimitingPolicyFiltroErogazione dest ) {
  5297.         convert( src, (RateLimitingPolicyFiltro) dest);
  5298.         dest.setSoggettoFruitore(src.getNomeFruitore());
  5299.            
  5300.         return dest;
  5301.     }
  5302.    
  5303.    
  5304.     public static final RateLimitingPolicyFiltroFruizione  convert ( AttivazionePolicyFiltro src, RateLimitingPolicyFiltroFruizione dest ) {
  5305.         convert(src, (RateLimitingPolicyFiltro) dest);
  5306.         return dest;
  5307.     }
  5308.    
  5309.    
  5310.     // ATTIVAZIONE POLICY Conversion
  5311.    
  5312.     public static final RateLimitingPolicyFruizioneView convert ( AttivazionePolicy src, InfoPolicy infoPolicy, RateLimitingPolicyFruizioneView dest ) {
  5313.        
  5314.         convert( src, infoPolicy, (RateLimitingPolicyBase) dest );

  5315.         dest.setDescrizione(infoPolicy.getDescrizione());
  5316.         dest.setNome( PolicyUtilities.getNomeActivePolicy(src.getAlias(), src.getIdActivePolicy()));
  5317.                
  5318.         dest.setRaggruppamento(
  5319.                 convert( src.getGroupBy(), new RateLimitingPolicyGroupBy() )
  5320.             );
  5321.      
  5322.        
  5323.         dest.setFiltro(
  5324.                 convert( src.getFiltro(), new RateLimitingPolicyFiltroFruizione() )
  5325.             );
  5326.        
  5327.         return dest;
  5328.     }

  5329.    
  5330.    
  5331.     public static final RateLimitingPolicyErogazioneView convert ( AttivazionePolicy src, InfoPolicy infoPolicy, RateLimitingPolicyErogazioneView dest ) {
  5332.        
  5333.         convert( src, infoPolicy, (RateLimitingPolicyBase) dest );

  5334.         dest.setDescrizione(infoPolicy.getDescrizione());
  5335.         dest.setNome( PolicyUtilities.getNomeActivePolicy(src.getAlias(), src.getIdActivePolicy()));
  5336.        
  5337.         dest.setRaggruppamento(
  5338.                 convert( src.getGroupBy(), new RateLimitingPolicyGroupBy() )
  5339.             );
  5340.      
  5341.        
  5342.         dest.setFiltro(
  5343.                 convert( src.getFiltro(), new RateLimitingPolicyFiltroErogazione() )
  5344.             );
  5345.        
  5346.         return dest;
  5347.     }
  5348.    
  5349.    
  5350.     public static final RateLimitingPolicyBase convert (AttivazionePolicy src, InfoPolicy infoPolicy, RateLimitingPolicyBase dest ) {
  5351.    
  5352.         dest.setNome(src.getAlias());
  5353.        
  5354.         if ( src.isWarningOnly() )
  5355.             dest.setStato( StatoFunzionalitaConWarningEnum.WARNINGONLY );
  5356.        
  5357.         if ( src.isEnabled() )
  5358.             dest.setStato(StatoFunzionalitaConWarningEnum.ABILITATO );
  5359.         else
  5360.             dest.setStato(StatoFunzionalitaConWarningEnum.DISABILITATO );
  5361.        
  5362.         boolean dimensioneMessaggio = false;
  5363.        
  5364.         if(dest instanceof RateLimitingPolicyBaseConIdentificazione) {
  5365.             RateLimitingPolicyBaseConIdentificazione destIdentificazione = (RateLimitingPolicyBaseConIdentificazione) dest;
  5366.            
  5367.             if(infoPolicy.isBuiltIn()) {
  5368.                 RateLimitingPolicyCriteri criteri = new RateLimitingPolicyCriteri();
  5369.                 criteri.setIdentificazione(RateLimitingIdentificazionePolicyEnum.CRITERI);
  5370.                 boolean intervallo = true;
  5371.                 switch (infoPolicy.getTipoRisorsa()) {
  5372.                 case NUMERO_RICHIESTE:
  5373.                     if(infoPolicy.isCheckRichiesteSimultanee()) {
  5374.                         criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE_SIMULTANEE);
  5375.                         intervallo = false;
  5376.                     }
  5377.                     else {
  5378.                         criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE);
  5379.                     }
  5380.                     break;
  5381.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  5382.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE_OK);
  5383.                     break;
  5384.                 case NUMERO_RICHIESTE_FALLITE:
  5385.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE_FALLITE);
  5386.                     break;
  5387.                 case NUMERO_FAULT_APPLICATIVI:
  5388.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_FAULT_APPLICATIVI);
  5389.                     break;
  5390.                 case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  5391.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE_FALLITE_O_FAULT_APPLICATIVI);
  5392.                     break;
  5393.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  5394.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.NUMERO_RICHIESTE_OK_O_FAULT_APPLICATIVI);
  5395.                     break;
  5396.                 case DIMENSIONE_MASSIMA_MESSAGGIO:
  5397.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.DIMENSIONE_MASSIMA);
  5398.                     dimensioneMessaggio = true;
  5399.                     break;
  5400.                 case OCCUPAZIONE_BANDA:
  5401.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.OCCUPAZIONE_BANDA);
  5402.                     break;
  5403.                 case TEMPO_MEDIO_RISPOSTA:
  5404.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.TEMPO_MEDIO_RISPOSTA);
  5405.                     break;
  5406.                 case TEMPO_COMPLESSIVO_RISPOSTA:
  5407.                     criteri.setMetrica(RateLimitingCriteriMetricaEnum.TEMPO_COMPLESSIVO_RISPOSTA);
  5408.                     break;
  5409.                 }
  5410.                 if(intervallo) {
  5411.                     switch (infoPolicy.getIntervalloUtilizzaRisorseRealtimeTipoPeriodo()) {
  5412.                     case MINUTI:
  5413.                         criteri.setIntervallo(RateLimitingCriteriIntervalloEnum.MINUTI);
  5414.                         break;
  5415.                     case ORARIO:
  5416.                         criteri.setIntervallo(RateLimitingCriteriIntervalloEnum.ORARIO);
  5417.                         break;
  5418.                     case GIORNALIERO:
  5419.                         criteri.setIntervallo(RateLimitingCriteriIntervalloEnum.GIORNALIERO);
  5420.                         break;
  5421.                     default:
  5422.                         break;
  5423.                     }
  5424.                 }
  5425.                 criteri.setCongestione(infoPolicy.isControlloCongestione());
  5426.                 criteri.setDegrado(infoPolicy.isDegradoPrestazione());
  5427.                 destIdentificazione.setConfigurazione(criteri);
  5428.             }
  5429.             else {
  5430.                 RateLimitingPolicyIdentificativo id = new RateLimitingPolicyIdentificativo();
  5431.                 id.setIdentificazione(RateLimitingIdentificazionePolicyEnum.POLICY);
  5432.                 id.setPolicy(infoPolicy.getIdPolicy());
  5433.                
  5434.                 if(TipoRisorsa.DIMENSIONE_MASSIMA_MESSAGGIO.equals(infoPolicy.getTipoRisorsa())) {
  5435.                     dimensioneMessaggio = true;
  5436.                 }
  5437.                
  5438.                 destIdentificazione.setConfigurazione(id);
  5439.             }
  5440.         }

  5441.        
  5442.        
  5443.         dest.setSogliaRidefinita(src.isRidefinisci());
  5444.        
  5445.         if ( src.isRidefinisci()) {
  5446.             if(dimensioneMessaggio) {
  5447.                 dest.setSogliaDimensioneRichiesta(src.getValore2().intValue());
  5448.                 dest.setSogliaDimensioneRisposta(src.getValore().intValue());
  5449.             }
  5450.             else {
  5451.                 dest.setSogliaValore(src.getValore().intValue());
  5452.             }
  5453.         }
  5454.         else {
  5455.             if(dimensioneMessaggio) {
  5456.                 dest.setSogliaDimensioneRichiesta(infoPolicy.getValore2().intValue());
  5457.                 dest.setSogliaDimensioneRisposta(infoPolicy.getValore().intValue());
  5458.             }
  5459.             else {
  5460.                 dest.setSogliaValore(infoPolicy.getValore().intValue());
  5461.             }
  5462.         }
  5463.        
  5464.        
  5465.         return dest;
  5466.            
  5467.     }


  5468.     public static final void checkAzioniAdd( List<String> toAdd, List<String> occupate, List<String> presenti ) {
  5469.        
  5470.         for ( String azione : toAdd ) {
  5471.            
  5472.             if( occupate.contains(azione) ) {
  5473.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(CostantiControlStation.MESSAGGIO_ERRORE_AZIONE_PORTA_GIA_PRESENTE));          
  5474.             }
  5475.            
  5476.             if( !presenti.contains(azione) ) {
  5477.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Azione " + azione + " non presente fra le azioni dell'accordo");
  5478.             }
  5479.         }
  5480.        
  5481.     }


  5482.     public static final String getDataElementModalita(RateLimitingIdentificazionePolicyEnum identificazione) {
  5483.         switch (identificazione) {
  5484.         case POLICY:
  5485.             return ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA_CUSTOM;
  5486.         case CRITERI:
  5487.             return ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA_BUILT_IN;
  5488.         }
  5489.         return null;
  5490.     }
  5491.     public static final String getDataElementModalita(boolean builtIt) {
  5492.         return builtIt ? getDataElementModalita(RateLimitingIdentificazionePolicyEnum.CRITERI) : getDataElementModalita(RateLimitingIdentificazionePolicyEnum.POLICY);
  5493.     }
  5494.    
  5495.     public static final String getIdPolicy(RateLimitingPolicyBaseConIdentificazione body, ConfigurazioneCore confCore, ConfigurazioneHelper confHelper) throws Exception {
  5496.        
  5497.         String idPolicy = null;
  5498.         switch (body.getConfigurazione().getIdentificazione()) {
  5499.         case POLICY:
  5500.             RateLimitingPolicyIdentificativo identificativo = new RateLimitingPolicyIdentificativo();
  5501.             identificativo = BaseHelper.deserialize(body.getConfigurazione(), RateLimitingPolicyIdentificativo.class);
  5502.             idPolicy = identificativo.getPolicy();
  5503.             break;
  5504.         case CRITERI:
  5505.             RateLimitingPolicyCriteri criteri = new RateLimitingPolicyCriteri();
  5506.             criteri = BaseHelper.deserialize(body.getConfigurazione(), RateLimitingPolicyCriteri.class);
  5507.            
  5508.             String modalitaRisorsa = getDataElementModalitaRisorsa(criteri.getMetrica());
  5509.             boolean modalitaSimultaneeEnabled = confHelper.isTipoRisorsaNumeroRichiesteSimultanee(modalitaRisorsa);
  5510.             String modalitaEsiti = null;
  5511.             String modalitaIntervallo = null;
  5512.             if(criteri.getIntervallo()!=null) {
  5513.                 modalitaIntervallo = getDataElementModalitaIntervallo(criteri.getIntervallo());
  5514.             }
  5515.             boolean modalitaCongestioneEnabled = criteri.isCongestione()!=null ? criteri.isCongestione() : false;
  5516.             boolean modalitaDegradoEnabled = criteri.isDegrado()!=null ? criteri.isDegrado() : false;
  5517.             boolean modalitaErrorRateEnabled = false;
  5518.            
  5519.             List<InfoPolicy> infoPolicies = confCore.infoPolicyList(true);
  5520.             List<InfoPolicy> idPoliciesSoddisfanoCriteri = new ArrayList<>();
  5521.             confHelper.findPolicyBuiltIn(infoPolicies, idPoliciesSoddisfanoCriteri,
  5522.                     modalitaRisorsa, modalitaEsiti, modalitaSimultaneeEnabled, modalitaIntervallo,
  5523.                     modalitaCongestioneEnabled, modalitaDegradoEnabled, modalitaErrorRateEnabled);
  5524.             if(idPoliciesSoddisfanoCriteri.size()>0) {
  5525.                 idPolicy = idPoliciesSoddisfanoCriteri.get(0).getIdPolicy();
  5526.             }
  5527.             break;
  5528.         }
  5529.        
  5530.         return idPolicy;
  5531.     }
  5532.    
  5533.     public static String getDataElementModalitaRisorsa(RateLimitingCriteriMetricaEnum risorsa) {
  5534.         TipoRisorsaPolicyAttiva tipoRisorsaPolicyAttiva = null;
  5535.         switch (risorsa) {
  5536.         case NUMERO_RICHIESTE:
  5537.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE;
  5538.             break;
  5539.         case NUMERO_RICHIESTE_SIMULTANEE:
  5540.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE_SIMULTANEE;
  5541.             break;
  5542.         case NUMERO_RICHIESTE_OK:
  5543.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO;
  5544.             break;
  5545.         case NUMERO_RICHIESTE_FALLITE:
  5546.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE_FALLITE;
  5547.             break;
  5548.         case NUMERO_FAULT_APPLICATIVI:
  5549.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_FAULT_APPLICATIVI;
  5550.             break;
  5551.         case NUMERO_RICHIESTE_FALLITE_O_FAULT_APPLICATIVI:
  5552.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI;
  5553.             break;
  5554.         case NUMERO_RICHIESTE_OK_O_FAULT_APPLICATIVI:
  5555.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI;
  5556.             break;
  5557.         case DIMENSIONE_MASSIMA:
  5558.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.DIMENSIONE_MASSIMA_MESSAGGIO;
  5559.             break;
  5560.         case OCCUPAZIONE_BANDA:
  5561.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.OCCUPAZIONE_BANDA;
  5562.             break;
  5563.         case TEMPO_MEDIO_RISPOSTA:
  5564.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.TEMPO_MEDIO_RISPOSTA;
  5565.             break;
  5566.         case TEMPO_COMPLESSIVO_RISPOSTA:
  5567.             tipoRisorsaPolicyAttiva = TipoRisorsaPolicyAttiva.TEMPO_COMPLESSIVO_RISPOSTA;
  5568.             break;
  5569.         }
  5570.         return tipoRisorsaPolicyAttiva!=null ? tipoRisorsaPolicyAttiva.getValue() : null;
  5571.     }
  5572.     private static String getDataElementModalitaIntervallo(RateLimitingCriteriIntervalloEnum intervallo) {
  5573.         String modalitaRisorsaEsiti = null;
  5574.         switch (intervallo) {
  5575.         case MINUTI:
  5576.             modalitaRisorsaEsiti = TipoPeriodoRealtime.MINUTI.getValue();
  5577.             break;
  5578.         case ORARIO:
  5579.             modalitaRisorsaEsiti = TipoPeriodoRealtime.ORARIO.getValue();
  5580.             break;
  5581.         case GIORNALIERO:
  5582.             modalitaRisorsaEsiti = TipoPeriodoRealtime.GIORNALIERO.getValue();
  5583.             break;
  5584.         }
  5585.         return modalitaRisorsaEsiti;
  5586.     }
  5587.    
  5588.    
  5589.     public static final void override(TipoRisorsa tipoRisorsa, String idPolicy, RateLimitingPolicyErogazione body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5590.         if (body == null) return;

  5591.         override (tipoRisorsa, (RateLimitingPolicyErogazione) body, protocollo, idPropietarioSa, wrap );
  5592.        
  5593.         wrap.overrideParameter(
  5594.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ID,
  5595.                 idPolicy    
  5596.             );      
  5597.     }
  5598.    

  5599.     public static final void override(TipoRisorsa tipoRisorsa, String idPolicy, RateLimitingPolicyFruizione body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5600.         if (body == null) return;

  5601.         override (tipoRisorsa, (RateLimitingPolicyFruizione) body, protocollo, idPropietarioSa, wrap );
  5602.        
  5603.         wrap.overrideParameter(
  5604.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ID,
  5605.                 idPolicy
  5606.             );
  5607.     }
  5608.    
  5609.     public static final void override( RateLimitingPolicyFiltro body, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5610.         if (body == null) return;
  5611.        
  5612.         if(body.getAzione()!=null && !body.getAzione().isEmpty()) {
  5613.        
  5614.             wrap.overrideParameterValues(
  5615.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_AZIONE,
  5616.                     body.getAzione().toArray(new String[1])
  5617.                 );
  5618.        
  5619.         }
  5620.        
  5621.         wrap.overrideParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_SA_FRUITORE, body.getApplicativoFruitore());
  5622.        
  5623.         wrap.overrideParameter(
  5624.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_FRUITORE,
  5625.                 evalnull( () -> body.getRuoloRichiedente() )  
  5626.             );
  5627.        
  5628.         String tokenClaims = null;
  5629.         if(body.getTokenClaims()!=null && !body.getTokenClaims().isEmpty()) {
  5630.             tokenClaims = String.join("\n", body.getTokenClaims());
  5631.         }
  5632.         if(tokenClaims!=null) {
  5633.             wrap.overrideParameter(
  5634.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_TOKEN_CLAIMS,
  5635.                     tokenClaims  
  5636.                 );
  5637.         }
  5638.        
  5639.        
  5640.         wrap.overrideParameter(
  5641.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_ENABLED,
  5642.                 evalnull( () -> ServletUtils.boolToCheckBoxStatus( body.getChiaveTipo() != null ))  // TOWAIT: mailandrea, non ho in rest un valore per la checkbox isFiltroAbilitato, quindi deduco il valore della checkbox così
  5643.             );
  5644.        
  5645.         wrap.overrideParameter(
  5646.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_TIPO,
  5647.                 evalnull( () -> Enums.tipoFiltroApplicativo.get( body.getChiaveTipo() ).toString())
  5648.             );
  5649.        
  5650.         wrap.overrideParameter(
  5651.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_NOME,
  5652.                 evalnull( () -> body.getChiaveNome() )  
  5653.             );
  5654.        
  5655.         wrap.overrideParameter(
  5656.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_VALORE,
  5657.                 evalnull( () -> body.getFiltroChiaveValore() )
  5658.             );  
  5659.     }
  5660.    
  5661.     public static final void override(  RateLimitingPolicyGroupBy body,  IDSoggetto idPropietarioSa, HttpRequestWrapper wrap )
  5662.     {
  5663.         if (body == null) return;

  5664.    
  5665.         wrap.overrideParameter(
  5666.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_ENABLED,
  5667.                 body != null
  5668.                     ?  ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_STATO_COLLEZIONAMENTO_ABILITATO
  5669.                     :  ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_STATO_COLLEZIONAMENTO_DISABILITATO
  5670.             );
  5671.        
  5672.         wrap.overrideParameter(
  5673.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_AZIONE,
  5674.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.isAzione() ) )
  5675.             );  
  5676.        
  5677.         wrap.overrideParameter(
  5678.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_RICHIEDENTE,
  5679.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.isRichiedente() ) )
  5680.             );
  5681.        
  5682.         if(body.getToken()!=null && !body.getToken().isEmpty()) {
  5683.            
  5684.             wrap.overrideParameter(
  5685.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_TOKEN,
  5686.                     evalnull(  () -> ServletUtils.boolToCheckBoxStatus( true ) )
  5687.                 );
  5688.            
  5689.             List<String> values = new ArrayList<>();
  5690.             for (TokenClaimEnum tokenClaim : body.getToken()) {
  5691.                 switch (tokenClaim) {
  5692.                 case SUBJECT:
  5693.                     values.add(TipoCredenzialeMittente.TOKEN_SUBJECT.getRawValue());
  5694.                     break;
  5695.                 case ISSUER:
  5696.                     values.add(TipoCredenzialeMittente.TOKEN_ISSUER.getRawValue());
  5697.                     break;
  5698.                 case CLIENT_ID:
  5699.                     values.add(TipoCredenzialeMittente.TOKEN_CLIENT_ID.getRawValue());
  5700.                     break;
  5701.                 case USERNAME:
  5702.                     values.add(TipoCredenzialeMittente.TOKEN_USERNAME.getRawValue());
  5703.                     break;
  5704.                 case EMAIL:
  5705.                     values.add(TipoCredenzialeMittente.TOKEN_EMAIL.getRawValue());
  5706.                     break;
  5707.                 default:
  5708.                     break;
  5709.                 }
  5710.             }
  5711.             if(!values.isEmpty()) {
  5712.                 wrap.overrideParameterValues(
  5713.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_TOKEN_CLAIMS,
  5714.                         values.toArray(new String[1])
  5715.                     );
  5716.             }
  5717.         }      
  5718.        
  5719.         wrap.overrideParameter(
  5720.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_ENABLED,
  5721.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.getChiaveTipo() != null ) )  
  5722.             );
  5723.        
  5724.         wrap.overrideParameter(
  5725.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_TIPO,
  5726.                 evalnull( () -> Enums.tipoFiltroApplicativo.get(body.getChiaveTipo()).toString() )
  5727.             );
  5728.        
  5729.         wrap.overrideParameter(
  5730.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_NOME,
  5731.                 evalnull( () -> body.getChiaveNome() )
  5732.             );
  5733.     }
  5734.    
  5735.     public static final void override(TipoRisorsa tipoRisorsa, RateLimitingPolicyErogazioneUpdate body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5736.         if (body == null) return;

  5737.         override(tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5738.        
  5739.         wrap.overrideParameter(
  5740.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5741.                 RuoloPolicy.APPLICATIVA.toString()
  5742.         );
  5743.        
  5744.         // Campi in più rispetto al padre:
  5745.         RateLimitingPolicyFiltroErogazione filtro = body.getFiltro();
  5746.         override( filtro, idPropietarioSa, wrap );
  5747.        
  5748.         if(filtro!=null) {
  5749.             final String filtroFruitore = evalnull(() -> filtro.getSoggettoFruitore()) != null  
  5750.                     ? new IDSoggetto(idPropietarioSa.getTipo(), filtro.getSoggettoFruitore()).toString()
  5751.                     : null;
  5752.            
  5753.             wrap.overrideParameter(
  5754.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_FRUITORE,
  5755.                     filtroFruitore
  5756.                 );
  5757.         }
  5758.        
  5759.         RateLimitingPolicyGroupBy groupCriteria = body.getRaggruppamento();
  5760.         override( groupCriteria, idPropietarioSa, wrap );

  5761.     }
  5762.     public static final void override(TipoRisorsa tipoRisorsa, RateLimitingPolicyErogazione body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5763.         if (body == null) return;

  5764.         override(tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5765.        
  5766.         wrap.overrideParameter(
  5767.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5768.                 RuoloPolicy.APPLICATIVA.toString()
  5769.         );
  5770.        
  5771.         // Campi in più rispetto al padre:
  5772.         RateLimitingPolicyFiltroErogazione filtro = body.getFiltro();
  5773.         override( filtro, idPropietarioSa, wrap );
  5774.        
  5775.         if(filtro!=null) {
  5776.             final String filtroFruitore = evalnull(() -> filtro.getSoggettoFruitore()) != null  
  5777.                     ? new IDSoggetto(idPropietarioSa.getTipo(), filtro.getSoggettoFruitore()).toString()
  5778.                     : null;
  5779.            
  5780.             wrap.overrideParameter(
  5781.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_FRUITORE,
  5782.                     filtroFruitore
  5783.                 );
  5784.         }
  5785.        
  5786.         RateLimitingPolicyGroupBy groupCriteria = body.getRaggruppamento();
  5787.         override( groupCriteria, idPropietarioSa, wrap );

  5788.     }
  5789.    
  5790.    
  5791.    
  5792.     public static final void override (TipoRisorsa tipoRisorsa,  RateLimitingPolicyFruizioneUpdate body,  String protocollo, IDSoggetto idPropietarioSa,  HttpRequestWrapper wrap ) {   // Questa è in comune alla update.
  5793.         if (body == null) return;

  5794.         override ( tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5795.         override ( body.getFiltro(), idPropietarioSa, wrap );
  5796.         override ( body.getRaggruppamento() , idPropietarioSa, wrap );
  5797.        
  5798.         wrap.overrideParameter(
  5799.             ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5800.             RuoloPolicy.DELEGATA.toString()
  5801.         );
  5802.     }
  5803.     public static final void override (TipoRisorsa tipoRisorsa,  RateLimitingPolicyFruizione body,  String protocollo, IDSoggetto idPropietarioSa,  HttpRequestWrapper wrap ) { // Questa è in comune alla update.
  5804.         if (body == null) return;

  5805.         override ( tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5806.         override ( body.getFiltro(), idPropietarioSa, wrap );
  5807.         override ( body.getRaggruppamento() , idPropietarioSa, wrap );
  5808.        
  5809.         wrap.overrideParameter(
  5810.             ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5811.             RuoloPolicy.DELEGATA.toString()
  5812.         );
  5813.        
  5814.     }
  5815.        
  5816.     public static final void override (TipoRisorsa tipoRisorsa, RateLimitingPolicyBase body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) { // Questa è in comune alla update.      
  5817.         if (body == null) return;

  5818.         wrap.overrideParameter(
  5819.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ALIAS,
  5820.                 body.getNome()
  5821.             );      
  5822.        
  5823.         wrap.overrideParameter(
  5824.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ENABLED,
  5825.                 body.getStato().toString()
  5826.                 );
  5827.        
  5828.         wrap.overrideParameter(
  5829.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_RIDEFINISCI,
  5830.                 ServletUtils.boolToCheckBoxStatus( body.isSogliaRidefinita() )
  5831.             );
  5832.        
  5833.        
  5834.         if(body.isSogliaRidefinita()) {
  5835.             if(TipoRisorsa.DIMENSIONE_MASSIMA_MESSAGGIO.equals(tipoRisorsa)) {
  5836.                
  5837.                 if(body.getSogliaDimensioneRichiesta()==null) {
  5838.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della richiesta non fornita");
  5839.                 }
  5840.                 if(body.getSogliaDimensioneRisposta()==null) {
  5841.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della risposta non fornita");
  5842.                 }
  5843.                 if(body.getSogliaValore()!=null) {
  5844.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Valore di Soglia non utilizzabile con una policy di tipo '"+RateLimitingCriteriMetricaEnum.DIMENSIONE_MASSIMA.toString()+"'");
  5845.                 }
  5846.                
  5847.                 wrap.overrideParameter(
  5848.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE_2,
  5849.                         evalnull( () -> body.getSogliaDimensioneRichiesta().toString() )
  5850.                     );
  5851.                
  5852.                 wrap.overrideParameter(
  5853.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE,
  5854.                         evalnull( () -> body.getSogliaDimensioneRisposta().toString() )
  5855.                     );
  5856.                
  5857.             }
  5858.             else {
  5859.            
  5860.                 if(body.getSogliaDimensioneRichiesta()!=null) {
  5861.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della richiesta non utilizzabile con una policy di tipo diverso da '"+RateLimitingCriteriMetricaEnum.DIMENSIONE_MASSIMA.toString()+"'");
  5862.                 }
  5863.                 if(body.getSogliaDimensioneRisposta()!=null) {
  5864.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della risposta non utilizzabile con una policy di tipo diverso da '"+RateLimitingCriteriMetricaEnum.DIMENSIONE_MASSIMA.toString()+"'");
  5865.                 }
  5866.                 if(body.getSogliaValore()==null) {
  5867.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Valore di Soglia non fornito");
  5868.                 }
  5869.                
  5870.                 wrap.overrideParameter(
  5871.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE,
  5872.                         evalnull( () -> body.getSogliaValore().toString() )
  5873.                     );
  5874.                
  5875.             }
  5876.         }
  5877.        
  5878.         wrap.overrideParameter(
  5879.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_ENABLED,
  5880.                 StatoFunzionalita.ABILITATO.toString()
  5881.             );
  5882.        
  5883.         wrap.overrideParameter(
  5884.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PROTOCOLLO,
  5885.                 protocollo
  5886.             );
  5887.     }


  5888.     public static final boolean correlazioneApplicativaRichiestaCheckData(
  5889.             TipoOperazione tipoOp,
  5890.             HttpRequestWrapper wrap,
  5891.             ConsoleHelper paHelper,
  5892.             boolean isDelegata,
  5893.             CorrelazioneApplicativaRichiesta body,
  5894.             Long idPorta,
  5895.             Long idCorrelazione,
  5896.             org.openspcoop2.message.constants.ServiceBinding serviceBinding
  5897.            
  5898.         ) throws Exception {
  5899.        
  5900.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID, idPorta.toString() );
  5901.        
  5902.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ELEMENTO_XML, body.getElemento() );        // Campo elemento oppure "Qualsiasi"
  5903.        
  5904.         wrap.overrideParameter(
  5905.                 CostantiControlStation.PARAMETRO_MODE_CORRELAZIONE_APPLICATIVA,
  5906.                 CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()).toString()
  5907.             );
  5908.        
  5909.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_PATTERN, body.getIdentificazione() );
  5910.        
  5911.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID_CORRELAZIONE, evalnull( () -> idCorrelazione.toString() ) );                    // Questo va impostato nella update.
  5912.        
  5913.         return paHelper.correlazioneApplicativaRichiestaCheckData(tipoOp,isDelegata,
  5914.                 serviceBinding);
  5915.        
  5916.     }
  5917.    
  5918.    
  5919.     public static final CorrelazioneApplicativaElemento convert(CorrelazioneApplicativaRichiesta body) {
  5920.        
  5921.         CorrelazioneApplicativaElemento cae = new CorrelazioneApplicativaElemento();
  5922.         cae.setNome(body.getElemento());
  5923.         cae.setIdentificazione(CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()));
  5924.        
  5925.         if ( body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.URL_BASED
  5926.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.HEADER_BASED
  5927.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.CONTENT_BASED
  5928.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.TEMPLATE
  5929.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.FREEMARKER_TEMPLATE
  5930.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.VELOCITY_TEMPLATE) {
  5931.            
  5932.             cae.setPattern(body.getIdentificazione());
  5933.         }
  5934.        
  5935.         if ( body.getIdentificazioneTipo() != CorrelazioneApplicativaRichiestaEnum.DISABILITATO ) {
  5936.            
  5937.             cae.setIdentificazioneFallita(body.isGenerazioneErroreIdentificazioneFallita()
  5938.                     ? CorrelazioneApplicativaGestioneIdentificazioneFallita.BLOCCA
  5939.                     : CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  5940.                 );
  5941.         }
  5942.         return cae;
  5943.     }
  5944.    
  5945.        
  5946.     public static final CorrelazioneApplicativaRispostaElemento convert(CorrelazioneApplicativaRisposta body) {

  5947.         CorrelazioneApplicativaRispostaElemento cae = new CorrelazioneApplicativaRispostaElemento();
  5948.         cae.setNome(body.getElemento());
  5949.         cae.setIdentificazione(CorrelazioneApplicativaRispostaIdentificazione.valueOf(body.getIdentificazioneTipo().name()));
  5950.        
  5951.         if (     body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.HEADER_BASED
  5952.             ||   body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.CONTENT_BASED
  5953.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.TEMPLATE
  5954.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.FREEMARKER_TEMPLATE
  5955.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.VELOCITY_TEMPLATE  ) {
  5956.            
  5957.             cae.setPattern(body.getIdentificazione());
  5958.         }
  5959.        
  5960.         if ( body.getIdentificazioneTipo() != CorrelazioneApplicativaRispostaEnum.DISABILITATO ) {
  5961.            
  5962.             cae.setIdentificazioneFallita(body.isGenerazioneErroreIdentificazioneFallita()
  5963.                     ? CorrelazioneApplicativaGestioneIdentificazioneFallita.BLOCCA
  5964.                     : CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  5965.                 );
  5966.         }
  5967.         return cae;
  5968.     }
  5969.    
  5970.    
  5971.     public static final boolean correlazioneApplicativaRispostaCheckData(
  5972.             TipoOperazione tipoOp,
  5973.             HttpRequestWrapper wrap,
  5974.             ConsoleHelper paHelper,
  5975.             boolean isDelegata,
  5976.             CorrelazioneApplicativaRisposta body,
  5977.             Long idPorta,
  5978.             Long idCorrelazione,
  5979.             org.openspcoop2.message.constants.ServiceBinding serviceBinding
  5980.         ) throws Exception {
  5981.        
  5982.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID, idPorta.toString() );
  5983.        
  5984.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ELEMENTO_XML, body.getElemento() );        // Campo elemento oppure "Qualsiasi"
  5985.        
  5986.         wrap.overrideParameter(
  5987.                 CostantiControlStation.PARAMETRO_MODE_CORRELAZIONE_APPLICATIVA,
  5988.                 CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()).toString()
  5989.             );
  5990.        
  5991.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_PATTERN, body.getIdentificazione() );
  5992.        
  5993.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID_CORRELAZIONE, evalnull( () -> idCorrelazione.toString() ));
  5994.    
  5995.        
  5996.         return paHelper.correlazioneApplicativaRichiestaCheckData(TipoOperazione.ADD,isDelegata,
  5997.                 serviceBinding);
  5998.        
  5999.     }



  6000.     public static final CorrelazioneApplicativaRichiesta convert( CorrelazioneApplicativaElemento  src) {
  6001.         CorrelazioneApplicativaRichiesta ret = new CorrelazioneApplicativaRichiesta();
  6002.        
  6003.         ret.setElemento( StringUtils.isEmpty(src.getNome())
  6004.                 ? "*"
  6005.                 : src.getNome()
  6006.             );
  6007.        
  6008.         ret.setGenerazioneErroreIdentificazioneFallita(src.getIdentificazioneFallita() == CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  6009.                 ? false
  6010.                 : true
  6011.             );
  6012.        
  6013.         ret.setIdentificazione(src.getPattern());
  6014.         ret.setIdentificazioneTipo(CorrelazioneApplicativaRichiestaEnum.valueOf(src.getIdentificazione().name()));
  6015.        
  6016.         return ret;
  6017.     }
  6018.    
  6019.    
  6020.     public static final CorrelazioneApplicativaRisposta convert( CorrelazioneApplicativaRispostaElemento  src) {
  6021.         CorrelazioneApplicativaRisposta ret = new CorrelazioneApplicativaRisposta();
  6022.        
  6023.         ret.setElemento( StringUtils.isEmpty(src.getNome())
  6024.                 ? "*"
  6025.                 : src.getNome()
  6026.             );
  6027.        
  6028.         ret.setGenerazioneErroreIdentificazioneFallita(src.getIdentificazioneFallita() == CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  6029.                 ? false
  6030.                 : true
  6031.             );
  6032.        
  6033.         ret.setIdentificazione(src.getPattern());
  6034.         ret.setIdentificazioneTipo(CorrelazioneApplicativaRispostaEnum.valueOf(src.getIdentificazione().name()));
  6035.        
  6036.         return ret;
  6037.     }
  6038.    
  6039.     public static final boolean isDumpConfigurazioneAbilitato(DumpConfigurazione configurazione, boolean isRisposta) {
  6040.         boolean abilitato = false;
  6041.        
  6042.         if(configurazione == null)
  6043.             return false;
  6044.        
  6045.         if(isRisposta) {
  6046.             DumpConfigurazioneRegola rispostaIngresso = configurazione.getRispostaIngresso();
  6047.            
  6048.             if(rispostaIngresso != null) {
  6049.                 if(rispostaIngresso.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6050.                     return true;
  6051.                
  6052.                 if(rispostaIngresso.getBody().equals(StatoFunzionalita.ABILITATO))
  6053.                     return true;
  6054.                
  6055.                 if(rispostaIngresso.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6056.                     return true;
  6057.             }
  6058.            
  6059.             DumpConfigurazioneRegola rispostaUscita = configurazione.getRispostaUscita();
  6060.            
  6061.             if(rispostaUscita != null) {
  6062.                 if(rispostaUscita.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6063.                     return true;
  6064.                
  6065.                 if(rispostaUscita.getBody().equals(StatoFunzionalita.ABILITATO))
  6066.                     return true;
  6067.                
  6068.                 if(rispostaUscita.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6069.                     return true;
  6070.             }
  6071.         } else {
  6072.             DumpConfigurazioneRegola richiestaIngresso = configurazione.getRichiestaIngresso();
  6073.            
  6074.             if(richiestaIngresso != null) {
  6075.                 if(richiestaIngresso.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6076.                     return true;
  6077.                
  6078.                 if(richiestaIngresso.getBody().equals(StatoFunzionalita.ABILITATO))
  6079.                     return true;
  6080.                
  6081.                 if(richiestaIngresso.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6082.                     return true;
  6083.             }
  6084.            
  6085.             DumpConfigurazioneRegola richiestaUscita = configurazione.getRichiestaUscita();
  6086.            
  6087.             if(richiestaUscita != null) {
  6088.                 if(richiestaUscita.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6089.                     return true;
  6090.                
  6091.                 if(richiestaUscita.getBody().equals(StatoFunzionalita.ABILITATO))
  6092.                     return true;
  6093.                
  6094.                 if(richiestaUscita.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6095.                     return true;
  6096.             }
  6097.         }
  6098.        
  6099.         return abilitato;
  6100.     }
  6101.    
  6102.    
  6103.     public static final void attivazionePolicyCheckData(
  6104.             TipoOperazione tipoOperazione,
  6105.             PortaApplicativa pa,
  6106.             AttivazionePolicy policy,
  6107.             InfoPolicy infoPolicy,  
  6108.             ErogazioniConfEnv env,
  6109.             org.openspcoop2.message.constants.ServiceBinding serviceBinding,
  6110.             String modalita) throws Exception  {

  6111.         final RuoloPolicy ruoloPorta = RuoloPolicy.APPLICATIVA;
  6112.         final String nomePorta = pa.getNome();
  6113.         // Controllo che l'azione scelta per il filtro sia supportata.
  6114.         boolean hasAzioni = pa.getAzione() != null && pa.getAzione().getAzioneDelegataList().size() > 0;
  6115.         List<String> azioniSupportate = hasAzioni
  6116.                     ? pa.getAzione().getAzioneDelegataList()
  6117.                     : env.confCore.getAzioni(
  6118.                         env.asps,
  6119.                         env.apcCore.getAccordoServizioSintetico(env.asps.getIdAccordo()),
  6120.                         false,
  6121.                         true,
  6122.                         ErogazioniApiHelper.getAzioniOccupateErogazione(env.idAsps, env.apsCore, env.paCore)
  6123.                     );
  6124.        
  6125.         if(policy.getFiltro().getAzione() != null && !policy.getFiltro().getAzione().isEmpty()) {
  6126.             String [] tmp = policy.getFiltro().getAzione().split(",");
  6127.             if(tmp!=null && tmp.length>0) {
  6128.                 for (String azCheck : tmp) {
  6129.                     if ( !azioniSupportate.contains(azCheck)) {
  6130.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'azione " + azCheck + " non è assegnabile a una policy di rate limiting per il gruppo scelto. le azioni supportare sono: " + azioniSupportate.toString());
  6131.                     }
  6132.                 }
  6133.             }
  6134.         }
  6135.        
  6136.         if(policy.getFiltro().getRuoloFruitore()!=null) {
  6137.            
  6138.             FiltroRicercaRuoli filtroRicercaRuoli = new FiltroRicercaRuoli();
  6139.             filtroRicercaRuoli.setTipologia(RuoloTipologia.INTERNO);
  6140.             List<IDRuolo> listIdRuoli = env.ruoliCore.getAllIdRuoli(filtroRicercaRuoli);
  6141.             List<String> ruoli = new ArrayList<>();
  6142.             if(listIdRuoli!=null && !listIdRuoli.isEmpty()) {
  6143.                 for (IDRuolo idRuolo : listIdRuoli) {
  6144.                     ruoli.add(idRuolo.getNome());
  6145.                 }
  6146.             }
  6147.            
  6148.             if ( !ruoli.contains(policy.getFiltro().getRuoloFruitore())) {
  6149.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + policy.getFiltro().getRuoloFruitore() + " non esiste.");
  6150.             }
  6151.         }
  6152.        
  6153.         // Controllo che l'applicativo fruitore scelto per il filtro sia supportato.
  6154.         if ( policy.getFiltro().getServizioApplicativoFruitore() != null &&            
  6155.                 !env.confCore.getServiziApplicativiFruitore(env.tipo_protocollo, null, env.idSoggetto.getTipo(), env.idSoggetto.getNome())
  6156.                 .stream()
  6157.                 .filter( id -> id.getNome().equals(policy.getFiltro().getServizioApplicativoFruitore()))
  6158.                 .findAny().isPresent()
  6159.         ) {
  6160.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il servizio applicativo fruitore " + policy.getFiltro().getServizioApplicativoFruitore() + " scelto non è assegnabile alla policy di rate limiting");
  6161.         }
  6162.        
  6163.         org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneControlloTraffico = env.confCore.getConfigurazioneControlloTraffico();
  6164.         if (! env.confHelper.attivazionePolicyCheckData(new StringBuilder(), tipoOperazione, configurazioneControlloTraffico,
  6165.                 policy,infoPolicy, ruoloPorta, nomePorta, serviceBinding, modalita) ) {
  6166.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  6167.         }
  6168.        
  6169.    
  6170.         // Controllo che il soggetto fruitore scelto per il filtro sia supportato, SOLO IN EROGAZIONI
  6171.         if ( policy.getFiltro().getTipoFruitore() != null && policy.getFiltro().getNomeFruitore() != null ) {
  6172.             List<IDSoggetto> soggettiSupportati = new ArrayList<IDSoggetto>();
  6173.            
  6174.             boolean multitenant = env.confCore.getConfigurazioneGenerale().getMultitenant().getStato() == StatoFunzionalita.ABILITATO;
  6175.             PddCore pddCore = new PddCore(env.stationCore);
  6176.             List<IDSoggetto> listSoggetti = env.confCore.getSoggetti(env.tipo_protocollo, null);
  6177.    
  6178.             for (IDSoggetto idSoggetto : listSoggetti) {
  6179.                 if(!multitenant && policy.getFiltro().getRuoloPorta()!=null &&
  6180.                         (policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.APPLICATIVA) || policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.DELEGATA))) {
  6181.                    
  6182.                     Soggetto s = env.soggettiCore.getSoggettoRegistro(idSoggetto);
  6183.                     boolean isPddEsterna = pddCore.isPddEsterna(s.getPortaDominio());
  6184.                     if( policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.APPLICATIVA)) {
  6185.                         // devo prendere i soggetti esterni
  6186.                         if(isPddEsterna) {
  6187.                             soggettiSupportati.add(idSoggetto);
  6188.                         }
  6189.                     }
  6190.                     else {
  6191.                         //policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.DELEGATA);
  6192.                         // devo prendere i soggetti interni
  6193.                         if(!isPddEsterna) {
  6194.                             soggettiSupportati.add(idSoggetto);
  6195.                         }
  6196.                     }
  6197.                 }
  6198.                 else {
  6199.                     soggettiSupportati.add(idSoggetto);
  6200.                 }
  6201.             }
  6202.            
  6203.             final IDSoggetto idSoggettoScelto = new IDSoggetto(policy.getFiltro().getTipoFruitore(), policy.getFiltro().getNomeFruitore());
  6204.             if ( !soggettiSupportati.contains(idSoggettoScelto) ) {
  6205.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il soggetto fruitore " + idSoggettoScelto.toString() + " scelto non è assegnabile alla policy di rate limiting.\n I soggetti supportati sono: " + soggettiSupportati.toString() );
  6206.             }
  6207.         }
  6208.    
  6209.        
  6210.        
  6211.     }


  6212.     public static ApiCanale toApiCanale(ErogazioniEnv env, PortaApplicativa pa, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6213.         return _toApiCanale(env, pa.getCanale(), apc, throwException);
  6214.     }
  6215.     public static ApiCanale toApiCanale(ErogazioniEnv env, PortaDelegata pd, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6216.         return _toApiCanale(env, pd.getCanale(), apc, throwException);
  6217.     }
  6218.     private static ApiCanale _toApiCanale(ErogazioniEnv env, String canalePorta, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6219.         ApiCanale canale = null;
  6220.         if(env.gestioneCanali) {
  6221.             canale = new ApiCanale();
  6222.             if(canalePorta!=null && !"".equals(canalePorta)) {
  6223.                 canale.setNome(canalePorta);
  6224.                 canale.setConfigurazione(CanaleEnum.IMPLEMENTAZIONE_API);
  6225.             }
  6226.             else if(apc.getCanale()!=null && !"".equals(apc.getCanale())) {
  6227.                 canale.setNome(apc.getCanale());
  6228.                 canale.setConfigurazione(CanaleEnum.API);
  6229.             }
  6230.             else {
  6231.                 canale.setNome(env.canaleDefault);
  6232.                 canale.setConfigurazione(CanaleEnum.DEFAULT);
  6233.             }
  6234.         }
  6235.         else {
  6236.             if(throwException) {
  6237.                 throw new Exception("Gestione dei canali non abilitata");
  6238.             }
  6239.         }
  6240.         return canale;
  6241.     }
  6242.    
  6243.    
  6244.    
  6245.     public static final void setFiltroApiImplementata(String uriApiImplementata, int idLista, ConsoleSearch ricerca, ErogazioniEnv env) throws Exception {
  6246.         //  tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
  6247.         String pattern1 = "^[a-z]{2,20}/[0-9A-Za-z]+:[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  6248.         String pattern2 = "^[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  6249.         try {
  6250.             IDAccordo idAccordo = null;
  6251.             IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  6252.             if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern1)) {
  6253.                 idAccordo = idAccordoFactory.getIDAccordoFromUri(uriApiImplementata);
  6254.             }
  6255.             else if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern2)) {
  6256.                 String uriCompleto = env.idSoggetto.getTipo()+"/"+env.idSoggetto.getNome()+":"+uriApiImplementata;
  6257.                 idAccordo = idAccordoFactory.getIDAccordoFromUri(uriCompleto);
  6258.             }
  6259.             else {
  6260.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"'");
  6261.             }
  6262.             ricerca.addFilter(idLista, Filtri.FILTRO_API, idAccordoFactory.getUriFromIDAccordo(idAccordo));
  6263.         }catch(RegExpNotFoundException e) {
  6264.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"': "+e.getMessage());
  6265.         }
  6266.     }
  6267.    
  6268.     public static boolean isConnettoreApplicativoServer(IdServizio idAsps, IDServizio idServizioFromAccordo, ErogazioniEnv env,
  6269.             String gruppo) throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  6270.         return isConnettoreApplicativoServer(getServizioApplicativo(idAsps, idServizioFromAccordo, env, gruppo));
  6271.     }
  6272.    
  6273.     public static boolean isConnettoreApplicativoServer(ServizioApplicativo sa) {
  6274.         return sa.getTipo() != null && sa.getTipo().equals(CostantiConfigurazione.SERVER);
  6275.     }
  6276.    
  6277.     public static void addInfoTokenPolicyForModI(Connettore regConnettore, ErogazioniEnv env,
  6278.             boolean checkEsistenzaTokenPolicy) throws Exception {
  6279.         if(regConnettore.getPropertyList()!=null && regConnettore.getPropertyList().size()>0) {
  6280.             for (Property p : regConnettore.getPropertyList()) {
  6281.                 if(CostantiConnettori.CONNETTORE_TOKEN_POLICY.equals(p.getNome())){
  6282.                     if(p.getValore()!=null && StringUtils.isNotEmpty(p.getValore())) {
  6283.                        
  6284.                         if(checkEsistenzaTokenPolicy) {
  6285.                             try {
  6286.                                 env.configCore.getGenericProperties(p.getValore(), CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE, false);
  6287.                             }catch(DriverConfigurazioneNotFound notFound) {
  6288.                                 throw FaultCode.RICHIESTA_NON_VALIDA
  6289.                                     .toException("Token policy di negoziazione '"+p.getValore()+"' non esistente");
  6290.                             }
  6291.                            
  6292.                         }
  6293.                        
  6294.                         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_CONNETTORE_TOKEN_POLICY_VIA_API, p.getValore());
  6295.                     }
  6296.                 }
  6297.             }
  6298.         }
  6299.     }
  6300. }