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 static org.openspcoop2.utils.service.beans.utils.ProfiloUtils.toProfilo;

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

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

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


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

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

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

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

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

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


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

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

  272.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  273.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

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

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

  286.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  287.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

  292.     }

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

  295.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  296.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

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

  305.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  306.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

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

  311.     }


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

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

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

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

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

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

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


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

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

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


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

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


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

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

  471.         ret.setIdSoggetto(soggErogatore.getId());
  472.         ret.setTipoSoggettoErogatore(soggErogatore.getTipo());
  473.         ret.setNomeSoggettoErogatore(soggErogatore.getNome());

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

  2432.         String nomePortaDefault = null;
  2433.         boolean isRidefinito = false;

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

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

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

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

  2527.         try {
  2528.             final IDServizio idServizio = env.idServizioFactory.getIDServizioFromAccordo(asps);
  2529.             final AccordoServizioParteComuneSintetico aspc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2530.             ProfiloEnum profilo = toProfilo(asps.getTipo());

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

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

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

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

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

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

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

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

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

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

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

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

  3672.     }

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

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



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



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



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

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

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


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



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

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


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



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

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


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

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


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



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

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



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

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



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



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

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

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

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

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



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



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



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

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

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

  5327.         dest.setDescrizione(infoPolicy.getDescrizione());
  5328.         dest.setNome( PolicyUtilities.getNomeActivePolicy(src.getAlias(), src.getIdActivePolicy()));
  5329.                
  5330.         dest.setRaggruppamento(
  5331.                 convert( src.getGroupBy(), new RateLimitingPolicyGroupBy() )
  5332.             );
  5333.      
  5334.        
  5335.         dest.setFiltro(
  5336.                 convert( src.getFiltro(), new RateLimitingPolicyFiltroFruizione() )
  5337.             );
  5338.        
  5339.         return dest;
  5340.     }

  5341.    
  5342.    
  5343.     public static final RateLimitingPolicyErogazioneView convert ( AttivazionePolicy src, InfoPolicy infoPolicy, RateLimitingPolicyErogazioneView dest ) {
  5344.        
  5345.         convert( src, infoPolicy, (RateLimitingPolicyBase) dest );

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

  5453.        
  5454.        
  5455.         dest.setSogliaRidefinita(src.isRidefinisci());
  5456.        
  5457.         if ( src.isRidefinisci()) {
  5458.             if(dimensioneMessaggio) {
  5459.                 dest.setSogliaDimensioneRichiesta(src.getValore2().intValue());
  5460.                 dest.setSogliaDimensioneRisposta(src.getValore().intValue());
  5461.             }
  5462.             else {
  5463.                 dest.setSogliaValore(src.getValore().intValue());
  5464.             }
  5465.         }
  5466.         else {
  5467.             if(dimensioneMessaggio) {
  5468.                 dest.setSogliaDimensioneRichiesta(infoPolicy.getValore2().intValue());
  5469.                 dest.setSogliaDimensioneRisposta(infoPolicy.getValore().intValue());
  5470.             }
  5471.             else {
  5472.                 dest.setSogliaValore(infoPolicy.getValore().intValue());
  5473.             }
  5474.         }
  5475.        
  5476.        
  5477.         return dest;
  5478.            
  5479.     }


  5480.     public static final void checkAzioniAdd( List<String> toAdd, List<String> occupate, List<String> presenti ) {
  5481.        
  5482.         for ( String azione : toAdd ) {
  5483.            
  5484.             if( occupate.contains(azione) ) {
  5485.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(CostantiControlStation.MESSAGGIO_ERRORE_AZIONE_PORTA_GIA_PRESENTE));          
  5486.             }
  5487.            
  5488.             if( !presenti.contains(azione) ) {
  5489.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Azione " + azione + " non presente fra le azioni dell'accordo");
  5490.             }
  5491.         }
  5492.        
  5493.     }


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

  5603.         override (tipoRisorsa, (RateLimitingPolicyErogazione) body, protocollo, idPropietarioSa, wrap );
  5604.        
  5605.         wrap.overrideParameter(
  5606.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ID,
  5607.                 idPolicy    
  5608.             );      
  5609.     }
  5610.    

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

  5613.         override (tipoRisorsa, (RateLimitingPolicyFruizione) body, protocollo, idPropietarioSa, wrap );
  5614.        
  5615.         wrap.overrideParameter(
  5616.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ID,
  5617.                 idPolicy
  5618.             );
  5619.     }
  5620.    
  5621.     public static final void override( RateLimitingPolicyFiltro body, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5622.         if (body == null) return;
  5623.        
  5624.         if(body.getAzione()!=null && !body.getAzione().isEmpty()) {
  5625.        
  5626.             wrap.overrideParameterValues(
  5627.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_AZIONE,
  5628.                     body.getAzione().toArray(new String[1])
  5629.                 );
  5630.        
  5631.         }
  5632.        
  5633.         wrap.overrideParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_SA_FRUITORE, body.getApplicativoFruitore());
  5634.        
  5635.         wrap.overrideParameter(
  5636.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_FRUITORE,
  5637.                 evalnull( () -> body.getRuoloRichiedente() )  
  5638.             );
  5639.        
  5640.         String tokenClaims = null;
  5641.         if(body.getTokenClaims()!=null && !body.getTokenClaims().isEmpty()) {
  5642.             tokenClaims = String.join("\n", body.getTokenClaims());
  5643.         }
  5644.         if(tokenClaims!=null) {
  5645.             wrap.overrideParameter(
  5646.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_TOKEN_CLAIMS,
  5647.                     tokenClaims  
  5648.                 );
  5649.         }
  5650.        
  5651.        
  5652.         wrap.overrideParameter(
  5653.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_ENABLED,
  5654.                 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ì
  5655.             );
  5656.        
  5657.         wrap.overrideParameter(
  5658.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_TIPO,
  5659.                 evalnull( () -> Enums.tipoFiltroApplicativo.get( body.getChiaveTipo() ).toString())
  5660.             );
  5661.        
  5662.         wrap.overrideParameter(
  5663.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_NOME,
  5664.                 evalnull( () -> body.getChiaveNome() )  
  5665.             );
  5666.        
  5667.         wrap.overrideParameter(
  5668.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PER_CHIAVE_VALORE,
  5669.                 evalnull( () -> body.getFiltroChiaveValore() )
  5670.             );  
  5671.     }
  5672.    
  5673.     private static final void override( RateLimitingPolicyGroupBy body,  HttpRequestWrapper wrap,
  5674.             String protocollo, boolean applicativa)
  5675.     {
  5676.         if (body == null) return;

  5677.    
  5678.         wrap.overrideParameter(
  5679.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_ENABLED,
  5680.                 body != null
  5681.                     ?  ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_STATO_COLLEZIONAMENTO_ABILITATO
  5682.                     :  ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_STATO_COLLEZIONAMENTO_DISABILITATO
  5683.             );
  5684.        
  5685.         wrap.overrideParameter(
  5686.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_AZIONE,
  5687.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.isAzione() ) )
  5688.             );  
  5689.        
  5690.         wrap.overrideParameter(
  5691.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_RICHIEDENTE,
  5692.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.isRichiedente() ) )
  5693.             );
  5694.        
  5695.         if(body.getToken()!=null && !body.getToken().isEmpty()) {
  5696.            
  5697.             wrap.overrideParameter(
  5698.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_TOKEN,
  5699.                     evalnull(  () -> ServletUtils.boolToCheckBoxStatus( true ) )
  5700.                 );
  5701.            
  5702.             boolean modiPdnd = applicativa && org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROTOCOL_NAME.equals(protocollo);
  5703.            
  5704.             List<String> values = new ArrayList<>();
  5705.             for (RateLimitingPolicyGroupByTokenClaimEnum tokenClaim : body.getToken()) {
  5706.                 switch (tokenClaim) {
  5707.                 case SUBJECT:
  5708.                     values.add(TipoCredenzialeMittente.TOKEN_SUBJECT.getRawValue());
  5709.                     break;
  5710.                 case ISSUER:
  5711.                     values.add(TipoCredenzialeMittente.TOKEN_ISSUER.getRawValue());
  5712.                     break;
  5713.                 case CLIENT_ID:
  5714.                     values.add(TipoCredenzialeMittente.TOKEN_CLIENT_ID.getRawValue());
  5715.                     break;
  5716.                 case USERNAME:
  5717.                     values.add(TipoCredenzialeMittente.TOKEN_USERNAME.getRawValue());
  5718.                     break;
  5719.                 case EMAIL:
  5720.                     values.add(TipoCredenzialeMittente.TOKEN_EMAIL.getRawValue());
  5721.                     break;
  5722.                    
  5723.                 case PDND_ORGANIZATION_NAME:
  5724.                     if(!modiPdnd) {
  5725.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di raggruppamento per nome organizzazione PDND è utilizzabile solamente per erogazioni con profilo di interoperabilità ModI");
  5726.                     }
  5727.                     values.add(TipoCredenzialeMittente.PDND_ORGANIZATION_NAME.getRawValue());
  5728.                     break;  
  5729.                 case PDND_EXTERNAL_ID:
  5730.                     if(!modiPdnd) {
  5731.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di raggruppamento per identificativo esterno dell'organizzazione è utilizzabile solamente per erogazioni con profilo di interoperabilità ModI");
  5732.                     }
  5733.                     values.add(TipoCredenzialeMittente.PDND_ORGANIZATION_EXTERNAL_ID.getRawValue());
  5734.                     break;  
  5735.                 case PDND_CONSUMER_ID:
  5736.                     if(!modiPdnd) {
  5737.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di raggruppamento per consumerId dell'organizzazione PDND è utilizzabile solamente per erogazioni con profilo di interoperabilità ModI");
  5738.                     }
  5739.                     values.add(TipoCredenzialeMittente.PDND_ORGANIZATION_CONSUMER_ID.getRawValue());
  5740.                     break;  
  5741.                 default:
  5742.                     break;
  5743.                 }
  5744.             }
  5745.             if(!values.isEmpty()) {
  5746.                 wrap.overrideParameterValues(
  5747.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_TOKEN_CLAIMS,
  5748.                         values.toArray(new String[1])
  5749.                     );
  5750.             }
  5751.         }      
  5752.        
  5753.         wrap.overrideParameter(
  5754.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_ENABLED,
  5755.                 evalnull(  () -> ServletUtils.boolToCheckBoxStatus( body.getChiaveTipo() != null ) )  
  5756.             );
  5757.        
  5758.         wrap.overrideParameter(
  5759.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_TIPO,
  5760.                 evalnull( () -> Enums.tipoFiltroApplicativo.get(body.getChiaveTipo()).toString() )
  5761.             );
  5762.        
  5763.         wrap.overrideParameter(
  5764.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_GROUPBY_PER_CHIAVE_NOME,
  5765.                 evalnull( () -> body.getChiaveNome() )
  5766.             );
  5767.     }
  5768.    
  5769.     public static final void override(TipoRisorsa tipoRisorsa, RateLimitingPolicyErogazioneUpdate body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) {
  5770.         if (body == null) return;

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

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

  5799.         override(tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5800.        
  5801.         wrap.overrideParameter(
  5802.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5803.                 RuoloPolicy.APPLICATIVA.toString()
  5804.         );
  5805.        
  5806.         // Campi in più rispetto al padre:
  5807.         RateLimitingPolicyFiltroErogazione filtro = body.getFiltro();
  5808.         override( filtro, idPropietarioSa, wrap );
  5809.        
  5810.         if(filtro!=null) {
  5811.             final String filtroFruitore = evalnull(() -> filtro.getSoggettoFruitore()) != null  
  5812.                     ? new IDSoggetto(idPropietarioSa.getTipo(), filtro.getSoggettoFruitore()).toString()
  5813.                     : null;
  5814.            
  5815.             wrap.overrideParameter(
  5816.                     ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_FRUITORE,
  5817.                     filtroFruitore
  5818.                 );
  5819.         }
  5820.        
  5821.         RateLimitingPolicyGroupBy groupCriteria = body.getRaggruppamento();
  5822.         override( groupCriteria, wrap,
  5823.                 protocollo, true );

  5824.     }
  5825.    
  5826.    
  5827.    
  5828.     public static final void override (TipoRisorsa tipoRisorsa,  RateLimitingPolicyFruizioneUpdate body,  String protocollo, IDSoggetto idPropietarioSa,  HttpRequestWrapper wrap ) {   // Questa è in comune alla update.
  5829.         if (body == null) return;

  5830.         override ( tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5831.         override ( body.getFiltro(), idPropietarioSa, wrap );
  5832.         override ( body.getRaggruppamento() , wrap,
  5833.                 protocollo, false );
  5834.        
  5835.         wrap.overrideParameter(
  5836.             ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5837.             RuoloPolicy.DELEGATA.toString()
  5838.         );
  5839.     }
  5840.     public static final void override (TipoRisorsa tipoRisorsa,  RateLimitingPolicyFruizione body,  String protocollo, IDSoggetto idPropietarioSa,  HttpRequestWrapper wrap ) { // Questa è in comune alla update.
  5841.         if (body == null) return;

  5842.         override ( tipoRisorsa, (RateLimitingPolicyBase) body, protocollo, idPropietarioSa, wrap );
  5843.         override ( body.getFiltro(), idPropietarioSa, wrap );
  5844.         override ( body.getRaggruppamento() , wrap,
  5845.                 protocollo, false  );
  5846.        
  5847.         wrap.overrideParameter(
  5848.             ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD,
  5849.             RuoloPolicy.DELEGATA.toString()
  5850.         );
  5851.        
  5852.     }
  5853.        
  5854.     public static final void override (TipoRisorsa tipoRisorsa, RateLimitingPolicyBase body, String protocollo, IDSoggetto idPropietarioSa, HttpRequestWrapper wrap ) { // Questa è in comune alla update.      
  5855.         if (body == null) return;

  5856.         wrap.overrideParameter(
  5857.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ALIAS,
  5858.                 body.getNome()
  5859.             );      
  5860.        
  5861.         wrap.overrideParameter(
  5862.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ENABLED,
  5863.                 body.getStato().toString()
  5864.                 );
  5865.        
  5866.         wrap.overrideParameter(
  5867.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_RIDEFINISCI,
  5868.                 ServletUtils.boolToCheckBoxStatus( body.isSogliaRidefinita() )
  5869.             );
  5870.        
  5871.        
  5872.         if(body.isSogliaRidefinita()) {
  5873.             if(TipoRisorsa.DIMENSIONE_MASSIMA_MESSAGGIO.equals(tipoRisorsa)) {
  5874.                
  5875.                 if(body.getSogliaDimensioneRichiesta()==null) {
  5876.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della richiesta non fornita");
  5877.                 }
  5878.                 if(body.getSogliaDimensioneRisposta()==null) {
  5879.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soglia relativa alla dimensione della risposta non fornita");
  5880.                 }
  5881.                 if(body.getSogliaValore()!=null) {
  5882.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Valore di Soglia non utilizzabile con una policy di tipo '"+RateLimitingCriteriMetricaEnum.DIMENSIONE_MASSIMA.toString()+"'");
  5883.                 }
  5884.                
  5885.                 wrap.overrideParameter(
  5886.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE_2,
  5887.                         evalnull( () -> body.getSogliaDimensioneRichiesta().toString() )
  5888.                     );
  5889.                
  5890.                 wrap.overrideParameter(
  5891.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE,
  5892.                         evalnull( () -> body.getSogliaDimensioneRisposta().toString() )
  5893.                     );
  5894.                
  5895.             }
  5896.             else {
  5897.            
  5898.                 if(body.getSogliaDimensioneRichiesta()!=null) {
  5899.                     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()+"'");
  5900.                 }
  5901.                 if(body.getSogliaDimensioneRisposta()!=null) {
  5902.                     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()+"'");
  5903.                 }
  5904.                 if(body.getSogliaValore()==null) {
  5905.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Valore di Soglia non fornito");
  5906.                 }
  5907.                
  5908.                 wrap.overrideParameter(
  5909.                         ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_VALORE,
  5910.                         evalnull( () -> body.getSogliaValore().toString() )
  5911.                     );
  5912.                
  5913.             }
  5914.         }
  5915.        
  5916.         wrap.overrideParameter(
  5917.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_ENABLED,
  5918.                 StatoFunzionalita.ABILITATO.toString()
  5919.             );
  5920.        
  5921.         wrap.overrideParameter(
  5922.                 ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PROTOCOLLO,
  5923.                 protocollo
  5924.             );
  5925.     }


  5926.     public static final boolean correlazioneApplicativaRichiestaCheckData(
  5927.             TipoOperazione tipoOp,
  5928.             HttpRequestWrapper wrap,
  5929.             ConsoleHelper paHelper,
  5930.             boolean isDelegata,
  5931.             CorrelazioneApplicativaRichiesta body,
  5932.             Long idPorta,
  5933.             Long idCorrelazione,
  5934.             org.openspcoop2.message.constants.ServiceBinding serviceBinding
  5935.            
  5936.         ) throws Exception {
  5937.        
  5938.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID, idPorta.toString() );
  5939.        
  5940.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ELEMENTO_XML, body.getElemento() );        // Campo elemento oppure "Qualsiasi"
  5941.        
  5942.         wrap.overrideParameter(
  5943.                 CostantiControlStation.PARAMETRO_MODE_CORRELAZIONE_APPLICATIVA,
  5944.                 CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()).toString()
  5945.             );
  5946.        
  5947.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_PATTERN, body.getIdentificazione() );
  5948.        
  5949.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID_CORRELAZIONE, evalnull( () -> idCorrelazione.toString() ) );                    // Questo va impostato nella update.
  5950.        
  5951.         return paHelper.correlazioneApplicativaRichiestaCheckData(tipoOp,isDelegata,
  5952.                 serviceBinding);
  5953.        
  5954.     }
  5955.    
  5956.    
  5957.     public static final CorrelazioneApplicativaElemento convert(CorrelazioneApplicativaRichiesta body) {
  5958.        
  5959.         CorrelazioneApplicativaElemento cae = new CorrelazioneApplicativaElemento();
  5960.         cae.setNome(body.getElemento());
  5961.         cae.setIdentificazione(CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()));
  5962.        
  5963.         if ( body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.URL_BASED
  5964.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.HEADER_BASED
  5965.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.CONTENT_BASED
  5966.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.TEMPLATE
  5967.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.FREEMARKER_TEMPLATE
  5968.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRichiestaEnum.VELOCITY_TEMPLATE) {
  5969.            
  5970.             cae.setPattern(body.getIdentificazione());
  5971.         }
  5972.        
  5973.         if ( body.getIdentificazioneTipo() != CorrelazioneApplicativaRichiestaEnum.DISABILITATO ) {
  5974.            
  5975.             cae.setIdentificazioneFallita(body.isGenerazioneErroreIdentificazioneFallita()
  5976.                     ? CorrelazioneApplicativaGestioneIdentificazioneFallita.BLOCCA
  5977.                     : CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  5978.                 );
  5979.         }
  5980.         return cae;
  5981.     }
  5982.    
  5983.        
  5984.     public static final CorrelazioneApplicativaRispostaElemento convert(CorrelazioneApplicativaRisposta body) {

  5985.         CorrelazioneApplicativaRispostaElemento cae = new CorrelazioneApplicativaRispostaElemento();
  5986.         cae.setNome(body.getElemento());
  5987.         cae.setIdentificazione(CorrelazioneApplicativaRispostaIdentificazione.valueOf(body.getIdentificazioneTipo().name()));
  5988.        
  5989.         if (     body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.HEADER_BASED
  5990.             ||   body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.CONTENT_BASED
  5991.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.TEMPLATE
  5992.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.FREEMARKER_TEMPLATE
  5993.             ||  body.getIdentificazioneTipo() == CorrelazioneApplicativaRispostaEnum.VELOCITY_TEMPLATE  ) {
  5994.            
  5995.             cae.setPattern(body.getIdentificazione());
  5996.         }
  5997.        
  5998.         if ( body.getIdentificazioneTipo() != CorrelazioneApplicativaRispostaEnum.DISABILITATO ) {
  5999.            
  6000.             cae.setIdentificazioneFallita(body.isGenerazioneErroreIdentificazioneFallita()
  6001.                     ? CorrelazioneApplicativaGestioneIdentificazioneFallita.BLOCCA
  6002.                     : CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  6003.                 );
  6004.         }
  6005.         return cae;
  6006.     }
  6007.    
  6008.    
  6009.     public static final boolean correlazioneApplicativaRispostaCheckData(
  6010.             TipoOperazione tipoOp,
  6011.             HttpRequestWrapper wrap,
  6012.             ConsoleHelper paHelper,
  6013.             boolean isDelegata,
  6014.             CorrelazioneApplicativaRisposta body,
  6015.             Long idPorta,
  6016.             Long idCorrelazione,
  6017.             org.openspcoop2.message.constants.ServiceBinding serviceBinding
  6018.         ) throws Exception {
  6019.        
  6020.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID, idPorta.toString() );
  6021.        
  6022.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ELEMENTO_XML, body.getElemento() );        // Campo elemento oppure "Qualsiasi"
  6023.        
  6024.         wrap.overrideParameter(
  6025.                 CostantiControlStation.PARAMETRO_MODE_CORRELAZIONE_APPLICATIVA,
  6026.                 CorrelazioneApplicativaRichiestaIdentificazione.valueOf(body.getIdentificazioneTipo().name()).toString()
  6027.             );
  6028.        
  6029.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_PATTERN, body.getIdentificazione() );
  6030.        
  6031.         wrap.overrideParameter( CostantiControlStation.PARAMETRO_ID_CORRELAZIONE, evalnull( () -> idCorrelazione.toString() ));
  6032.    
  6033.        
  6034.         return paHelper.correlazioneApplicativaRichiestaCheckData(TipoOperazione.ADD,isDelegata,
  6035.                 serviceBinding);
  6036.        
  6037.     }



  6038.     public static final CorrelazioneApplicativaRichiesta convert( CorrelazioneApplicativaElemento  src) {
  6039.         CorrelazioneApplicativaRichiesta ret = new CorrelazioneApplicativaRichiesta();
  6040.        
  6041.         ret.setElemento( StringUtils.isEmpty(src.getNome())
  6042.                 ? "*"
  6043.                 : src.getNome()
  6044.             );
  6045.        
  6046.         ret.setGenerazioneErroreIdentificazioneFallita(src.getIdentificazioneFallita() == CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  6047.                 ? false
  6048.                 : true
  6049.             );
  6050.        
  6051.         ret.setIdentificazione(src.getPattern());
  6052.         ret.setIdentificazioneTipo(CorrelazioneApplicativaRichiestaEnum.valueOf(src.getIdentificazione().name()));
  6053.        
  6054.         return ret;
  6055.     }
  6056.    
  6057.    
  6058.     public static final CorrelazioneApplicativaRisposta convert( CorrelazioneApplicativaRispostaElemento  src) {
  6059.         CorrelazioneApplicativaRisposta ret = new CorrelazioneApplicativaRisposta();
  6060.        
  6061.         ret.setElemento( StringUtils.isEmpty(src.getNome())
  6062.                 ? "*"
  6063.                 : src.getNome()
  6064.             );
  6065.        
  6066.         ret.setGenerazioneErroreIdentificazioneFallita(src.getIdentificazioneFallita() == CorrelazioneApplicativaGestioneIdentificazioneFallita.ACCETTA
  6067.                 ? false
  6068.                 : true
  6069.             );
  6070.        
  6071.         ret.setIdentificazione(src.getPattern());
  6072.         ret.setIdentificazioneTipo(CorrelazioneApplicativaRispostaEnum.valueOf(src.getIdentificazione().name()));
  6073.        
  6074.         return ret;
  6075.     }
  6076.    
  6077.     public static final boolean isDumpConfigurazioneAbilitato(DumpConfigurazione configurazione, boolean isRisposta) {
  6078.         boolean abilitato = false;
  6079.        
  6080.         if(configurazione == null)
  6081.             return false;
  6082.        
  6083.         if(isRisposta) {
  6084.             DumpConfigurazioneRegola rispostaIngresso = configurazione.getRispostaIngresso();
  6085.            
  6086.             if(rispostaIngresso != null) {
  6087.                 if(rispostaIngresso.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6088.                     return true;
  6089.                
  6090.                 if(rispostaIngresso.getBody().equals(StatoFunzionalita.ABILITATO))
  6091.                     return true;
  6092.                
  6093.                 if(rispostaIngresso.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6094.                     return true;
  6095.             }
  6096.            
  6097.             DumpConfigurazioneRegola rispostaUscita = configurazione.getRispostaUscita();
  6098.            
  6099.             if(rispostaUscita != null) {
  6100.                 if(rispostaUscita.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6101.                     return true;
  6102.                
  6103.                 if(rispostaUscita.getBody().equals(StatoFunzionalita.ABILITATO))
  6104.                     return true;
  6105.                
  6106.                 if(rispostaUscita.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6107.                     return true;
  6108.             }
  6109.         } else {
  6110.             DumpConfigurazioneRegola richiestaIngresso = configurazione.getRichiestaIngresso();
  6111.            
  6112.             if(richiestaIngresso != null) {
  6113.                 if(richiestaIngresso.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6114.                     return true;
  6115.                
  6116.                 if(richiestaIngresso.getBody().equals(StatoFunzionalita.ABILITATO))
  6117.                     return true;
  6118.                
  6119.                 if(richiestaIngresso.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6120.                     return true;
  6121.             }
  6122.            
  6123.             DumpConfigurazioneRegola richiestaUscita = configurazione.getRichiestaUscita();
  6124.            
  6125.             if(richiestaUscita != null) {
  6126.                 if(richiestaUscita.getHeaders().equals(StatoFunzionalita.ABILITATO))
  6127.                     return true;
  6128.                
  6129.                 if(richiestaUscita.getBody().equals(StatoFunzionalita.ABILITATO))
  6130.                     return true;
  6131.                
  6132.                 if(richiestaUscita.getAttachments().equals(StatoFunzionalita.ABILITATO))
  6133.                     return true;
  6134.             }
  6135.         }
  6136.        
  6137.         return abilitato;
  6138.     }
  6139.    
  6140.    
  6141.     public static final void attivazionePolicyCheckData(
  6142.             TipoOperazione tipoOperazione,
  6143.             PortaApplicativa pa,
  6144.             AttivazionePolicy policy,
  6145.             InfoPolicy infoPolicy,  
  6146.             ErogazioniConfEnv env,
  6147.             org.openspcoop2.message.constants.ServiceBinding serviceBinding,
  6148.             String modalita) throws Exception  {

  6149.         final RuoloPolicy ruoloPorta = RuoloPolicy.APPLICATIVA;
  6150.         final String nomePorta = pa.getNome();
  6151.         // Controllo che l'azione scelta per il filtro sia supportata.
  6152.         boolean hasAzioni = pa.getAzione() != null && pa.getAzione().getAzioneDelegataList().size() > 0;
  6153.         List<String> azioniSupportate = hasAzioni
  6154.                     ? pa.getAzione().getAzioneDelegataList()
  6155.                     : env.confCore.getAzioni(
  6156.                         env.asps,
  6157.                         env.apcCore.getAccordoServizioSintetico(env.asps.getIdAccordo()),
  6158.                         false,
  6159.                         true,
  6160.                         ErogazioniApiHelper.getAzioniOccupateErogazione(env.idAsps, env.apsCore, env.paCore)
  6161.                     );
  6162.        
  6163.         if(policy.getFiltro().getAzione() != null && !policy.getFiltro().getAzione().isEmpty()) {
  6164.             String [] tmp = policy.getFiltro().getAzione().split(",");
  6165.             if(tmp!=null && tmp.length>0) {
  6166.                 for (String azCheck : tmp) {
  6167.                     if ( !azioniSupportate.contains(azCheck)) {
  6168.                         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());
  6169.                     }
  6170.                 }
  6171.             }
  6172.         }
  6173.        
  6174.         if(policy.getFiltro().getRuoloFruitore()!=null) {
  6175.            
  6176.             FiltroRicercaRuoli filtroRicercaRuoli = new FiltroRicercaRuoli();
  6177.             filtroRicercaRuoli.setTipologia(RuoloTipologia.INTERNO);
  6178.             List<IDRuolo> listIdRuoli = env.ruoliCore.getAllIdRuoli(filtroRicercaRuoli);
  6179.             List<String> ruoli = new ArrayList<>();
  6180.             if(listIdRuoli!=null && !listIdRuoli.isEmpty()) {
  6181.                 for (IDRuolo idRuolo : listIdRuoli) {
  6182.                     ruoli.add(idRuolo.getNome());
  6183.                 }
  6184.             }
  6185.            
  6186.             if ( !ruoli.contains(policy.getFiltro().getRuoloFruitore())) {
  6187.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + policy.getFiltro().getRuoloFruitore() + " non esiste.");
  6188.             }
  6189.         }
  6190.        
  6191.         // Controllo che l'applicativo fruitore scelto per il filtro sia supportato.
  6192.         if ( policy.getFiltro().getServizioApplicativoFruitore() != null &&            
  6193.                 !env.confCore.getServiziApplicativiFruitore(env.tipo_protocollo, null, env.idSoggetto.getTipo(), env.idSoggetto.getNome())
  6194.                 .stream()
  6195.                 .filter( id -> id.getNome().equals(policy.getFiltro().getServizioApplicativoFruitore()))
  6196.                 .findAny().isPresent()
  6197.         ) {
  6198.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il servizio applicativo fruitore " + policy.getFiltro().getServizioApplicativoFruitore() + " scelto non è assegnabile alla policy di rate limiting");
  6199.         }
  6200.        
  6201.         org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneControlloTraffico = env.confCore.getConfigurazioneControlloTraffico();
  6202.         if (! env.confHelper.attivazionePolicyCheckData(new StringBuilder(), tipoOperazione, configurazioneControlloTraffico,
  6203.                 policy,infoPolicy, ruoloPorta, nomePorta, serviceBinding, modalita) ) {
  6204.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  6205.         }
  6206.        
  6207.    
  6208.         // Controllo che il soggetto fruitore scelto per il filtro sia supportato, SOLO IN EROGAZIONI
  6209.         if ( policy.getFiltro().getTipoFruitore() != null && policy.getFiltro().getNomeFruitore() != null ) {
  6210.             List<IDSoggetto> soggettiSupportati = new ArrayList<IDSoggetto>();
  6211.            
  6212.             boolean multitenant = env.confCore.getConfigurazioneGenerale().getMultitenant().getStato() == StatoFunzionalita.ABILITATO;
  6213.             PddCore pddCore = new PddCore(env.stationCore);
  6214.             List<IDSoggetto> listSoggetti = env.confCore.getSoggetti(env.tipo_protocollo, null);
  6215.    
  6216.             for (IDSoggetto idSoggetto : listSoggetti) {
  6217.                 if(!multitenant && policy.getFiltro().getRuoloPorta()!=null &&
  6218.                         (policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.APPLICATIVA) || policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.DELEGATA))) {
  6219.                    
  6220.                     Soggetto s = env.soggettiCore.getSoggettoRegistro(idSoggetto);
  6221.                     boolean isPddEsterna = pddCore.isPddEsterna(s.getPortaDominio());
  6222.                     if( policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.APPLICATIVA)) {
  6223.                         // devo prendere i soggetti esterni
  6224.                         if(isPddEsterna) {
  6225.                             soggettiSupportati.add(idSoggetto);
  6226.                         }
  6227.                     }
  6228.                     else {
  6229.                         //policy.getFiltro().getRuoloPorta().equals(RuoloPolicy.DELEGATA);
  6230.                         // devo prendere i soggetti interni
  6231.                         if(!isPddEsterna) {
  6232.                             soggettiSupportati.add(idSoggetto);
  6233.                         }
  6234.                     }
  6235.                 }
  6236.                 else {
  6237.                     soggettiSupportati.add(idSoggetto);
  6238.                 }
  6239.             }
  6240.            
  6241.             final IDSoggetto idSoggettoScelto = new IDSoggetto(policy.getFiltro().getTipoFruitore(), policy.getFiltro().getNomeFruitore());
  6242.             if ( !soggettiSupportati.contains(idSoggettoScelto) ) {
  6243.                 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() );
  6244.             }
  6245.         }
  6246.    
  6247.        
  6248.        
  6249.     }


  6250.     public static ApiCanale toApiCanale(ErogazioniEnv env, PortaApplicativa pa, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6251.         return _toApiCanale(env, pa.getCanale(), apc, throwException);
  6252.     }
  6253.     public static ApiCanale toApiCanale(ErogazioniEnv env, PortaDelegata pd, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6254.         return _toApiCanale(env, pd.getCanale(), apc, throwException);
  6255.     }
  6256.     private static ApiCanale _toApiCanale(ErogazioniEnv env, String canalePorta, AccordoServizioParteComuneSintetico apc, boolean throwException) throws Exception{
  6257.         ApiCanale canale = null;
  6258.         if(env.gestioneCanali) {
  6259.             canale = new ApiCanale();
  6260.             if(canalePorta!=null && !"".equals(canalePorta)) {
  6261.                 canale.setNome(canalePorta);
  6262.                 canale.setConfigurazione(CanaleEnum.IMPLEMENTAZIONE_API);
  6263.             }
  6264.             else if(apc.getCanale()!=null && !"".equals(apc.getCanale())) {
  6265.                 canale.setNome(apc.getCanale());
  6266.                 canale.setConfigurazione(CanaleEnum.API);
  6267.             }
  6268.             else {
  6269.                 canale.setNome(env.canaleDefault);
  6270.                 canale.setConfigurazione(CanaleEnum.DEFAULT);
  6271.             }
  6272.         }
  6273.         else {
  6274.             if(throwException) {
  6275.                 throw new Exception("Gestione dei canali non abilitata");
  6276.             }
  6277.         }
  6278.         return canale;
  6279.     }
  6280.    
  6281.    
  6282.    
  6283.     public static final void setFiltroApiImplementata(String uriApiImplementata, int idLista, ConsoleSearch ricerca, ErogazioniEnv env) throws Exception {
  6284.         //  tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
  6285.         String pattern1 = "^[a-z]{2,20}/[0-9A-Za-z]+:[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  6286.         String pattern2 = "^[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  6287.         try {
  6288.             IDAccordo idAccordo = null;
  6289.             IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  6290.             if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern1)) {
  6291.                 idAccordo = idAccordoFactory.getIDAccordoFromUri(uriApiImplementata);
  6292.             }
  6293.             else if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern2)) {
  6294.                 String uriCompleto = env.idSoggetto.getTipo()+"/"+env.idSoggetto.getNome()+":"+uriApiImplementata;
  6295.                 idAccordo = idAccordoFactory.getIDAccordoFromUri(uriCompleto);
  6296.             }
  6297.             else {
  6298.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"'");
  6299.             }
  6300.             ricerca.addFilter(idLista, Filtri.FILTRO_API, idAccordoFactory.getUriFromIDAccordo(idAccordo));
  6301.         }catch(RegExpNotFoundException e) {
  6302.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"': "+e.getMessage());
  6303.         }
  6304.     }
  6305.    
  6306.     public static boolean isConnettoreApplicativoServer(IdServizio idAsps, IDServizio idServizioFromAccordo, ErogazioniEnv env,
  6307.             String gruppo) throws DriverConfigurazioneNotFound, DriverConfigurazioneException, CoreException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
  6308.         return isConnettoreApplicativoServer(getServizioApplicativo(idAsps, idServizioFromAccordo, env, gruppo));
  6309.     }
  6310.    
  6311.     public static boolean isConnettoreApplicativoServer(ServizioApplicativo sa) {
  6312.         return sa.getTipo() != null && sa.getTipo().equals(CostantiConfigurazione.SERVER);
  6313.     }
  6314.    
  6315.     public static void addInfoTokenPolicyForModI(Connettore regConnettore, ErogazioniEnv env,
  6316.             boolean checkEsistenzaTokenPolicy) throws Exception {
  6317.         if(regConnettore.getPropertyList()!=null && regConnettore.getPropertyList().size()>0) {
  6318.             for (Property p : regConnettore.getPropertyList()) {
  6319.                 if(CostantiConnettori.CONNETTORE_TOKEN_POLICY.equals(p.getNome())){
  6320.                     if(p.getValore()!=null && StringUtils.isNotEmpty(p.getValore())) {
  6321.                        
  6322.                         if(checkEsistenzaTokenPolicy) {
  6323.                             try {
  6324.                                 env.configCore.getGenericProperties(p.getValore(), CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE, false);
  6325.                             }catch(DriverConfigurazioneNotFound notFound) {
  6326.                                 throw FaultCode.RICHIESTA_NON_VALIDA
  6327.                                     .toException("Token policy di negoziazione '"+p.getValore()+"' non esistente");
  6328.                             }
  6329.                            
  6330.                         }
  6331.                        
  6332.                         env.requestWrapper.overrideParameter(Costanti.CONSOLE_PARAMETRO_CONNETTORE_TOKEN_POLICY_VIA_API, p.getValore());
  6333.                     }
  6334.                 }
  6335.             }
  6336.         }
  6337.     }
  6338. }