ErogazioniConfigurazioneApiServiceImpl.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.configurazione;

  21. import static org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper.convert;
  22. import static org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper.correlazioneApplicativaRichiestaCheckData;
  23. import static org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper.correlazioneApplicativaRispostaCheckData;

  24. import java.util.ArrayList;
  25. import java.util.Arrays;
  26. import java.util.List;
  27. import java.util.Optional;
  28. import java.util.stream.Collectors;

  29. import org.apache.commons.lang.StringEscapeUtils;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.openspcoop2.core.byok.BYOKUtilities;
  32. import org.openspcoop2.core.commons.CoreException;
  33. import org.openspcoop2.core.commons.Filtri;
  34. import org.openspcoop2.core.commons.Liste;
  35. import org.openspcoop2.core.config.AttributeAuthority;
  36. import org.openspcoop2.core.config.AutorizzazioneRuoli;
  37. import org.openspcoop2.core.config.AutorizzazioneScope;
  38. import org.openspcoop2.core.config.CorrelazioneApplicativa;
  39. import org.openspcoop2.core.config.CorrelazioneApplicativaElemento;
  40. import org.openspcoop2.core.config.CorrelazioneApplicativaRispostaElemento;
  41. import org.openspcoop2.core.config.CorsConfigurazione;
  42. import org.openspcoop2.core.config.GenericProperties;
  43. import org.openspcoop2.core.config.GestioneToken;
  44. import org.openspcoop2.core.config.PortaApplicativa;
  45. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneServiziApplicativi;
  46. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneServizioApplicativo;
  47. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneSoggetti;
  48. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneSoggetto;
  49. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneToken;
  50. import org.openspcoop2.core.config.Proprieta;
  51. import org.openspcoop2.core.config.ProtocolProperty;
  52. import org.openspcoop2.core.config.ResponseCachingConfigurazione;
  53. import org.openspcoop2.core.config.Ruolo;
  54. import org.openspcoop2.core.config.Scope;
  55. import org.openspcoop2.core.config.ServizioApplicativo;
  56. import org.openspcoop2.core.config.Soggetto;
  57. import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
  58. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  59. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  60. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  61. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  62. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  63. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  64. import org.openspcoop2.core.config.constants.ValidazioneContenutiApplicativiTipo;
  65. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  66. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  67. import org.openspcoop2.core.config.rs.server.api.ErogazioniConfigurazioneApi;
  68. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  69. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  70. import org.openspcoop2.core.config.rs.server.api.impl.IdServizio;
  71. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper;
  72. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniEnv;
  73. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  74. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKey;
  75. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKeyConfig;
  76. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKeyPosizione;
  77. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneBasic;
  78. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneCustom;
  79. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneHttps;
  80. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazionePrincipal;
  81. import org.openspcoop2.core.config.rs.server.model.ApiCanale;
  82. import org.openspcoop2.core.config.rs.server.model.ApiImplStato;
  83. import org.openspcoop2.core.config.rs.server.model.CachingRisposta;
  84. import org.openspcoop2.core.config.rs.server.model.ConfigurazioneApiCanale;
  85. import org.openspcoop2.core.config.rs.server.model.ConfigurazioneCanaleEnum;
  86. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAttributeAuthority;
  87. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutenticazione;
  88. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutenticazioneToken;
  89. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazione;
  90. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneRuoli;
  91. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneRuolo;
  92. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneScope;
  93. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneScopes;
  94. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneSoggetti;
  95. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneSoggetto;
  96. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneView;
  97. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiErogazioneAutorizzazioneApplicativi;
  98. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiErogazioneAutorizzazioneApplicativo;
  99. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiGestioneToken;
  100. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiIdentificazioneAttributi;
  101. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiesta;
  102. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiestaEnum;
  103. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiestaItem;
  104. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRisposta;
  105. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRispostaEnum;
  106. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRispostaItem;
  107. import org.openspcoop2.core.config.rs.server.model.ElencoProprieta;
  108. import org.openspcoop2.core.config.rs.server.model.GestioneCors;
  109. import org.openspcoop2.core.config.rs.server.model.ListaCorrelazioneApplicativaRichiesta;
  110. import org.openspcoop2.core.config.rs.server.model.ListaCorrelazioneApplicativaRisposta;
  111. import org.openspcoop2.core.config.rs.server.model.ListaRateLimitingPolicy;
  112. import org.openspcoop2.core.config.rs.server.model.OneOfControlloAccessiAutenticazioneAutenticazione;
  113. import org.openspcoop2.core.config.rs.server.model.RateLimitingCriteriMetricaEnum;
  114. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyErogazione;
  115. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyErogazioneUpdate;
  116. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyErogazioneView;
  117. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyItem;
  118. import org.openspcoop2.core.config.rs.server.model.RegistrazioneMessaggi;
  119. import org.openspcoop2.core.config.rs.server.model.RegistrazioneDiagnosticiConfigurazione;
  120. import org.openspcoop2.core.config.rs.server.model.RegistrazioneTransazioniConfigurazione;
  121. import org.openspcoop2.core.config.rs.server.model.StatoFunzionalitaConWarningEnum;
  122. import org.openspcoop2.core.config.rs.server.model.TipoAutenticazioneEnum;
  123. import org.openspcoop2.core.config.rs.server.model.TipoAutenticazionePrincipalToken;
  124. import org.openspcoop2.core.config.rs.server.model.Validazione;
  125. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  126. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyFiltro;
  127. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyRaggruppamento;
  128. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  129. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  130. import org.openspcoop2.core.controllo_traffico.utils.ControlloTrafficoDriverUtils;
  131. import org.openspcoop2.core.controllo_traffico.utils.PolicyUtilities;
  132. import org.openspcoop2.core.id.IDPortaApplicativa;
  133. import org.openspcoop2.core.id.IDServizioApplicativo;
  134. import org.openspcoop2.core.id.IDSoggetto;
  135. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  136. import org.openspcoop2.core.registry.IdSoggetto;
  137. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  138. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  139. import org.openspcoop2.core.registry.constants.RuoloContesto;
  140. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  141. import org.openspcoop2.core.registry.constants.ScopeContesto;
  142. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  143. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  144. import org.openspcoop2.core.registry.driver.db.IDSoggettoDB;
  145. import org.openspcoop2.message.constants.ServiceBinding;
  146. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneApiKey;
  147. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneBasic;
  148. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazionePrincipal;
  149. import org.openspcoop2.protocol.modipa.constants.ModICostanti;
  150. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  151. import org.openspcoop2.utils.service.BaseImpl;
  152. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  153. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  154. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  155. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  156. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  157. import org.openspcoop2.utils.service.context.IContext;
  158. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  159. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  160. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  161. import org.openspcoop2.web.ctrlstat.servlet.ApiKeyState;
  162. import org.openspcoop2.web.ctrlstat.servlet.ConsoleUtilities;
  163. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneUtilities;
  164. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCostanti;
  165. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCore;
  166. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  167. /**
  168.  * ErogazioniConfigurazioneApiServiceImpl
  169.  *
  170.  * @author $Author$
  171.  * @version $Rev$, $Date$
  172.  *
  173.  */
  174. public class ErogazioniConfigurazioneApiServiceImpl extends BaseImpl implements ErogazioniConfigurazioneApi {

  175.     public ErogazioniConfigurazioneApiServiceImpl(){
  176.         super(org.slf4j.LoggerFactory.getLogger(ErogazioniConfigurazioneApiServiceImpl.class));
  177.     }

  178.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  179.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  180.     }

  181.     /**
  182.      * Aggiunta di applicativi all'elenco degli applicativi autorizzati
  183.      *
  184.      * Questa operazione consente di aggiungere applicativi all'elenco degli applicativi autorizzati
  185.      *
  186.      */
  187.     @Override
  188.     public void addErogazioneControlloAccessiAutorizzazioneApplicativi(ControlloAccessiErogazioneAutorizzazioneApplicativo body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  189.         IContext context = this.getContext();
  190.         try {
  191.             context.getLogger().info("Invocazione in corso ...");

  192.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  193.             context.getLogger().debug("Autorizzazione completata con successo");
  194.            
  195.             BaseHelper.throwIfNull(body);
  196.            
  197.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  198.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);

  199.             boolean isProfiloModi = env.isProfiloModi();
  200.            
  201.             boolean tokenAbilitato = pa.getGestioneToken()!=null && pa.getGestioneToken().getPolicy()!=null;
  202.            
  203.             boolean modiSicurezzaMessaggio = false;
  204.             if(isProfiloModi) {
  205.                 final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  206.                 ProtocolProperties protocolProperties = ErogazioniApiHelper.getProtocolProperties(asps, env);
  207.                 if(protocolProperties!=null && protocolProperties.sizeProperties()>0) {
  208.                     modiSicurezzaMessaggio = true;
  209.                 }
  210.             }
  211.            
  212.             if(isProfiloModi) {
  213.                 boolean enabled = pa.getServiziApplicativiAutorizzati()!=null && pa.sizeServizioApplicativoList()>0; // retrocompatibilita
  214.                 if(!enabled) {
  215.                     enabled = pa.getAutorizzazioneToken()!=null && StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneApplicativi());
  216.                 }
  217.                 if(!enabled) {
  218.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione messaggio per richiedente non ĆØ abilitata");
  219.                 }
  220.             }
  221.             else {
  222.                 if ( !TipoAutorizzazione.isAuthenticationRequired(pa.getAutorizzazione()) ) {
  223.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione trasporto per richiedente non ĆØ abilitata");
  224.                 }
  225.             }
  226.            
  227.             IdSoggetto idSoggettoProprietarioSA = (IdSoggetto) env.idSoggetto.clone();
  228.             if(org.apache.commons.lang.StringUtils.isNotEmpty(body.getSoggetto())) {
  229.                 idSoggettoProprietarioSA.setNome(body.getSoggetto());
  230.                 try {
  231.                     idSoggettoProprietarioSA.setId(env.soggettiCore.getIdSoggetto(body.getSoggetto(),env.tipo_soggetto));
  232.                 } catch (Exception e) {}
  233.             }
  234.            
  235.             final IDServizioApplicativo idSA = new IDServizioApplicativo();
  236.             idSA.setIdSoggettoProprietario(idSoggettoProprietarioSA.toIDSoggetto());
  237.             idSA.setNome(body.getApplicativo());
  238.            
  239.             final ServizioApplicativo sa = BaseHelper.supplyOrNonValida(
  240.                     () -> env.saCore.getServizioApplicativo(idSA),
  241.                     "Servizio Applicativo " + idSA.toString()
  242.                 );
  243.                    
  244.            
  245.             org.openspcoop2.core.config.constants.CredenzialeTipo tipoAutenticazione = null;
  246.             boolean check = true;
  247.             boolean bothSslAndToken = false;
  248.             if(isProfiloModi) {
  249.                
  250.                 if(!tokenAbilitato && !modiSicurezzaMessaggio) {
  251.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non ĆØ possibile registrare alcun applicativo: non ĆØ stata riscontrato alcun criterio di sicurezza (messaggio o token)");
  252.                 }
  253.                
  254.                 bothSslAndToken = tokenAbilitato && modiSicurezzaMessaggio;
  255.                
  256.                 boolean dominioInterno = env.isDominioInterno(idSA.getIdSoggettoProprietario());
  257.                 if(dominioInterno) {
  258.                     boolean sicurezzaMessaggio = false;
  259.                     boolean sicurezzaToken = false;
  260.                     if(sa.sizeProtocolPropertyList()>0) {
  261.                         for (ProtocolProperty pp : sa.getProtocolPropertyList()) {
  262.                             if(ModICostanti.MODIPA_SICUREZZA_MESSAGGIO.equals(pp.getName())) {
  263.                                 sicurezzaMessaggio = pp.getBooleanValue()!=null && pp.getBooleanValue();
  264.                             }
  265.                             else if(ModICostanti.MODIPA_SICUREZZA_TOKEN.equals(pp.getName())) {
  266.                                 sicurezzaToken = pp.getBooleanValue()!=null && pp.getBooleanValue();
  267.                             }
  268.                         }
  269.                     }
  270.                     check = false;
  271.                    
  272.                     if(bothSslAndToken) {
  273.                         if(!sicurezzaToken) {
  274.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza token richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  275.                         }
  276.                         if(!sicurezzaMessaggio) {
  277.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza messaggio richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  278.                         }
  279.                     }
  280.                     else if(tokenAbilitato) {
  281.                         if(!sicurezzaToken) {
  282.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza token richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  283.                         }
  284.                     }
  285.                     else { //if(modiSicurezzaMessaggio) {
  286.                         if(!sicurezzaMessaggio) {
  287.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza messaggio richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  288.                         }
  289.                     }
  290.                 }
  291.                 else {
  292.                     if(tokenAbilitato) {
  293.                         tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.TOKEN;
  294.                     }
  295.                     else {
  296.                         tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.SSL;
  297.                     }
  298.                 }
  299.             }
  300.             else {
  301.                 tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.toEnumConstant(pa.getAutenticazione());
  302.                
  303.                 if(tipoAutenticazione==null) {
  304.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non risulta abilitato un tipo di autenticazione trasporto nell'erogazione selezionata");
  305.                 }
  306.                
  307.             }
  308.             if(check) {
  309.                 Boolean appId = null;
  310.                 if(org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(tipoAutenticazione)) {
  311.                     ApiKeyState apiKeyState =  new ApiKeyState(env.paCore.getParametroAutenticazione(pa.getAutenticazione(), pa.getProprietaAutenticazioneList()));
  312.                     appId = apiKeyState.appIdSelected;
  313.                 }
  314.                 List<IDServizioApplicativoDB> saCompatibili = env.saCore.soggettiServizioApplicativoList(idSoggettoProprietarioSA.toIDSoggetto(),env.userLogin,tipoAutenticazione, appId,
  315.                         CostantiConfigurazione.CLIENT,
  316.                         bothSslAndToken, pa.getGestioneToken()!=null ? pa.getGestioneToken().getPolicy() : null);
  317.                 if(env.protocolFactory.createProtocolConfiguration().isSupportoAutenticazioneApplicativiErogazioni()) {
  318.                     if (!BaseHelper.findFirst(saCompatibili, s -> s.getId().equals(sa.getId())).isPresent()) {
  319.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il tipo di credenziali dell'Applicativo non sono compatibili con l'autenticazione impostata nell'erogazione selezionata");
  320.                     }
  321.                 }
  322.             }
  323.            
  324.             if (pa.getServiziApplicativiAutorizzati() == null)
  325.                 pa.setServiziApplicativiAutorizzati(new PortaApplicativaAutorizzazioneServiziApplicativi());
  326.            
  327.             if ( BaseHelper.findFirst(
  328.                         pa.getServiziApplicativiAutorizzati().getServizioApplicativoList(),
  329.                         s -> ( (sa.getNome().equals(s.getNome())) && (sa.getTipoSoggettoProprietario().equals(s.getTipoSoggettoProprietario())) && (sa.getNomeSoggettoProprietario().equals(s.getNomeSoggettoProprietario())) )
  330.                         ).isPresent()
  331.                 ) {
  332.                 throw FaultCode.CONFLITTO.toException("Servizio Applicativo giĆ  associato");
  333.             }
  334.            
  335.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, pa.getId().toString());
  336.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SOGGETTO, idSoggettoProprietarioSA.getId().toString());
  337.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_AUTORIZZATO, sa.getId().toString());
  338.             if (!env.paHelper.porteAppServizioApplicativoAutorizzatiCheckData(TipoOperazione.ADD)) {
  339.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  340.             }
  341.            
  342.             PortaApplicativaAutorizzazioneServizioApplicativo paSaAutorizzato = new PortaApplicativaAutorizzazioneServizioApplicativo();
  343.             paSaAutorizzato.setNome(sa.getNome());
  344.             paSaAutorizzato.setTipoSoggettoProprietario(idSoggettoProprietarioSA.getTipo());
  345.             paSaAutorizzato.setNomeSoggettoProprietario(idSoggettoProprietarioSA.getNome());

  346.             pa.getServiziApplicativiAutorizzati().addServizioApplicativo(paSaAutorizzato);          
  347.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  348.            
  349.             context.getLogger().info("Invocazione completata con successo");
  350.        
  351.             // Bug Fix: altrimenti viene generato 204
  352.             context.getServletResponse().setStatus(201);
  353.         }
  354.         catch(javax.ws.rs.WebApplicationException e) {
  355.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  356.             throw e;
  357.         }
  358.         catch(Throwable e) {
  359.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  360.             throw FaultCode.ERRORE_INTERNO.toException(e);
  361.         }
  362.     }
  363.    
  364.     /**
  365.      * Aggiunta di soggetti all'elenco dei soggetti autorizzati
  366.      *
  367.      * Questa operazione consente di aggiungere soggetti all'elenco dei soggetti autorizzati
  368.      *
  369.      */
  370.     @Override
  371.     public void addErogazioneControlloAccessiAutorizzazioneSoggetti(ControlloAccessiAutorizzazioneSoggetto body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  372.         IContext context = this.getContext();
  373.         try {
  374.            
  375.             // Continua da qui, assicurati che l'autorizzazione puntuale sia abilitata guardando al TipoAutorizzazioneEnum
  376.             context.getLogger().info("Invocazione in corso ...");    

  377.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  378.             context.getLogger().debug("Autorizzazione completata con successo");    
  379.                        
  380.             BaseHelper.throwIfNull(body);
  381.            
  382.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  383.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  384.            
  385.             boolean isProfiloModi = env.isProfiloModi();
  386.            
  387.             if ( !TipoAutorizzazione.isAuthenticationRequired(pa.getAutorizzazione())) {
  388.                 if(isProfiloModi) {
  389.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione canale per richiedente non ĆØ abilitata");
  390.                 }
  391.                 else {
  392.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione trasporto per richiedente non ĆØ abilitata");
  393.                 }
  394.             }
  395.                        
  396.             final IDSoggetto daAutenticareID = new IDSoggetto(env.tipo_soggetto, body.getSoggetto());
  397.             final Soggetto daAutenticare = BaseHelper.supplyOrNonValida(
  398.                     () -> env.soggettiCore.getSoggetto(daAutenticareID),
  399.                     "Soggetto " + body.getSoggetto() + " da autenticare"
  400.                 );
  401.            
  402.             final CredenzialeTipo tipoAutenticazione = CredenzialeTipo.toEnumConstant(pa.getAutenticazione());  
  403.             if(tipoAutenticazione==null) {
  404.                 if(!env.protocolFactory.createProtocolConfiguration().isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazioni()) {
  405.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non risulta abilitato un tipo di autenticazione trasporto nell'erogazione selezionata");
  406.                 }
  407.             }
  408.             else {
  409.                 Boolean appId = null;
  410.                 if(CredenzialeTipo.APIKEY.equals(tipoAutenticazione)) {
  411.                     ApiKeyState apiKeyState =  new ApiKeyState(env.paCore.getParametroAutenticazione(pa.getAutenticazione(), pa.getProprietaAutenticazioneList()));
  412.                     appId = apiKeyState.appIdSelected;
  413.                 }
  414.                 final List<String> tipiSoggettiGestitiProtocollo = env.soggettiCore.getTipiSoggettiGestitiProtocollo(env.tipo_protocollo);
  415.                
  416.                 // L'ultimo parametro ĆØ da configurare quando utilizzeremo il multitenant
  417.                 final List<IDSoggettoDB> soggettiCompatibili = env.soggettiCore.getSoggettiFromTipoAutenticazione(tipiSoggettiGestitiProtocollo, null, tipoAutenticazione, appId, null);
  418.                 if(env.protocolFactory.createProtocolConfiguration().isSupportoAutenticazioneSoggetti()) {
  419.                     if (!BaseHelper.findFirst(soggettiCompatibili, s -> {
  420.                             return (daAutenticare.getTipo().equals(s.getTipo()) && daAutenticare.getNome().equals(s.getNome()) );
  421.                         }).isPresent()) {
  422.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il tipo di credenziali del Soggetto non sono compatibili con l'autenticazione impostata nell'erogazione selezionata");
  423.                     }
  424.                 }
  425.             }
  426.            
  427.             if (pa.getSoggetti() == null) pa.setSoggetti(new PortaApplicativaAutorizzazioneSoggetti());
  428.            
  429.             if ( BaseHelper.findFirst(
  430.                     pa.getSoggetti().getSoggettoList(),
  431.                     sogg -> new IDSoggetto(sogg.getTipo(),sogg.getNome()).equals(daAutenticareID)
  432.                     ).isPresent()
  433.                 ) {
  434.                 throw FaultCode.CONFLITTO.toException("Soggetto da autorizzare giĆ  presente");
  435.             }
  436.            
  437.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, pa.getId().toString());
  438.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SOGGETTO, daAutenticare.getId().toString());
  439.             if (!env.paHelper.porteAppSoggettoCheckData(TipoOperazione.ADD)) {
  440.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  441.             }
  442.            
  443.        
  444.             PortaApplicativaAutorizzazioneSoggetto paSoggetto = new PortaApplicativaAutorizzazioneSoggetto();
  445.             paSoggetto.setTipo(daAutenticare.getTipo());
  446.             paSoggetto.setNome(daAutenticare.getNome());
  447.            
  448.             pa.getSoggetti().addSoggetto(paSoggetto);          
  449.        
  450.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  451.            
  452.             context.getLogger().info("Invocazione completata con successo");
  453.        
  454.             // Bug Fix: altrimenti viene generato 204
  455.             context.getServletResponse().setStatus(201);
  456.         }
  457.         catch(javax.ws.rs.WebApplicationException e) {
  458.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  459.             throw e;
  460.         }
  461.         catch(Throwable e) {
  462.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  463.             throw FaultCode.ERRORE_INTERNO.toException(e);
  464.         }
  465.     }
  466.    
  467.     /**
  468.      * Aggiunta di applicativi token all'elenco degli applicativi autorizzati
  469.      *
  470.      * Questa operazione consente di aggiungere applicativi token all'elenco degli applicativi autorizzati
  471.      *
  472.      */
  473.     @Override
  474.     public void addErogazioneControlloAccessiAutorizzazioneApplicativiToken(ControlloAccessiErogazioneAutorizzazioneApplicativo body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  475.         IContext context = this.getContext();
  476.         try {
  477.             context.getLogger().info("Invocazione in corso ...");    

  478.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  479.             context.getLogger().debug("Autorizzazione completata con successo");    
  480.                        
  481.             BaseHelper.throwIfNull(body);
  482.            
  483.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  484.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);

  485.             boolean isProfiloModi = env.isProfiloModi();
  486.            
  487.             boolean tokenAbilitato = pa.getGestioneToken()!=null && pa.getGestioneToken().getPolicy()!=null;
  488.            
  489.             boolean modiSicurezzaMessaggio = false;
  490.             if(isProfiloModi) {
  491.                 final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  492.                 ProtocolProperties protocolProperties = ErogazioniApiHelper.getProtocolProperties(asps, env);
  493.                 if(protocolProperties!=null && protocolProperties.sizeProperties()>0) {
  494.                     modiSicurezzaMessaggio = true;
  495.                 }
  496.             }
  497.            
  498.             if(isProfiloModi) {
  499.                 boolean enabled = pa.getServiziApplicativiAutorizzati()!=null && pa.sizeServizioApplicativoList()>0; // retrocompatibilita
  500.                 if(!enabled) {
  501.                     enabled = pa.getAutorizzazioneToken()!=null && StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneApplicativi());
  502.                 }
  503.                 if(!enabled) {
  504.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione messaggio per richiedente non ĆØ abilitata");
  505.                 }
  506.             }
  507.             else {
  508.                 if(pa.getGestioneToken()==null || pa.getGestioneToken().getPolicy()==null) {
  509.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per richiedente non ĆØ utilizzabile, non risulta abilitata una token policy di validazione");
  510.                 }
  511.                 if(pa.getAutorizzazioneToken()==null || !StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneApplicativi())) {
  512.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per richiedente non ĆØ abilitata");
  513.                 }
  514.             }
  515.             String tokenPolicy = (pa.getGestioneToken()!=null) ? pa.getGestioneToken().getPolicy() : null;
  516.            
  517.             IdSoggetto idSoggettoProprietarioSA = (IdSoggetto) env.idSoggetto.clone();
  518.             if(org.apache.commons.lang.StringUtils.isNotEmpty(body.getSoggetto())) {
  519.                 idSoggettoProprietarioSA.setNome(body.getSoggetto());
  520.                 try {
  521.                     idSoggettoProprietarioSA.setId(env.soggettiCore.getIdSoggetto(body.getSoggetto(),env.tipo_soggetto));
  522.                 } catch (Exception e) {}
  523.             }
  524.            
  525.             final IDServizioApplicativo idSA = new IDServizioApplicativo();
  526.             idSA.setIdSoggettoProprietario(idSoggettoProprietarioSA.toIDSoggetto());
  527.             idSA.setNome(body.getApplicativo());
  528.            
  529.             final ServizioApplicativo sa = BaseHelper.supplyOrNonValida(
  530.                     () -> env.saCore.getServizioApplicativo(idSA),
  531.                     "Servizio Applicativo " + idSA.toString()
  532.                 );
  533.                    
  534.            
  535.             org.openspcoop2.core.config.constants.CredenzialeTipo tipoAutenticazione = null;
  536.             boolean check = true;
  537.             boolean bothSslAndToken = false;
  538.             if(isProfiloModi) {
  539.                
  540.                 if(!tokenAbilitato && !modiSicurezzaMessaggio) {
  541.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non ĆØ possibile registrare alcun applicativo: non ĆØ stata riscontrato alcun criterio di sicurezza (messaggio o token)");
  542.                 }
  543.                
  544.                 bothSslAndToken = tokenAbilitato && modiSicurezzaMessaggio;
  545.                
  546.                 boolean dominioInterno = env.isDominioInterno(idSA.getIdSoggettoProprietario());
  547.                 if(dominioInterno) {
  548.                     boolean sicurezzaMessaggio = false;
  549.                     boolean sicurezzaToken = false;
  550.                     if(sa.sizeProtocolPropertyList()>0) {
  551.                         for (ProtocolProperty pp : sa.getProtocolPropertyList()) {
  552.                             if(ModICostanti.MODIPA_SICUREZZA_MESSAGGIO.equals(pp.getName())) {
  553.                                 sicurezzaMessaggio = pp.getBooleanValue()!=null && pp.getBooleanValue();
  554.                             }
  555.                             else if(ModICostanti.MODIPA_SICUREZZA_TOKEN.equals(pp.getName())) {
  556.                                 sicurezzaToken = pp.getBooleanValue()!=null && pp.getBooleanValue();
  557.                             }
  558.                         }
  559.                     }
  560.                     check = false;
  561.                    
  562.                     if(bothSslAndToken) {
  563.                         if(!sicurezzaToken) {
  564.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza token richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  565.                         }
  566.                         if(!sicurezzaMessaggio) {
  567.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza messaggio richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  568.                         }
  569.                     }
  570.                     else if(tokenAbilitato) {
  571.                         if(!sicurezzaToken) {
  572.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza token richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  573.                         }
  574.                     }
  575.                     else { //if(modiSicurezzaMessaggio) {
  576.                         if(!sicurezzaMessaggio) {
  577.                             throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'applicativo, di dominio interno, indicato non possiede una configurazione per la sicurezza messaggio richiesta per essere autorizzati ad invocare l'erogazione con profilo ModI indicata");
  578.                         }
  579.                     }
  580.                 }
  581.                 else {
  582.                     if(tokenAbilitato) {
  583.                         tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.TOKEN;
  584.                     }
  585.                     else {
  586.                         tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.SSL;
  587.                     }
  588.                 }
  589.             }
  590.             else {
  591.                 tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.TOKEN;
  592.             }
  593.             if(check) {
  594.                 Boolean appId = null;
  595.                 List<IDServizioApplicativoDB> saCompatibili = env.saCore.soggettiServizioApplicativoList(idSoggettoProprietarioSA.toIDSoggetto(),env.userLogin,tipoAutenticazione, appId,
  596.                         CostantiConfigurazione.CLIENT,
  597.                         bothSslAndToken, tokenPolicy);
  598.                 if(env.protocolFactory.createProtocolConfiguration().isSupportoAutenticazioneApplicativiErogazioni()) {
  599.                     if (!BaseHelper.findFirst(saCompatibili, s -> s.getId().equals(sa.getId())).isPresent()) {
  600.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il tipo di credenziali dell'Applicativo non sono compatibili con l'autenticazione impostata nell'erogazione selezionata");
  601.                     }
  602.                 }
  603.             }
  604.                
  605.             if(isProfiloModi) {
  606.                 if (pa.getServiziApplicativiAutorizzati() == null)
  607.                     pa.setServiziApplicativiAutorizzati(new PortaApplicativaAutorizzazioneServiziApplicativi());
  608.             }
  609.             else {
  610.                 if(pa.getAutorizzazioneToken()==null) {
  611.                     pa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  612.                 }
  613.                 if(pa.getAutorizzazioneToken().getServiziApplicativi()==null) {
  614.                     pa.getAutorizzazioneToken().setServiziApplicativi(new PortaApplicativaAutorizzazioneServiziApplicativi());
  615.                 }  
  616.             }
  617.            
  618.             List<PortaApplicativaAutorizzazioneServizioApplicativo> lSA = null;
  619.             if(isProfiloModi) {
  620.                 lSA = pa.getServiziApplicativiAutorizzati().getServizioApplicativoList();
  621.             }
  622.             else {
  623.                 lSA = pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativoList();
  624.             }
  625.            
  626.             if ( BaseHelper.findFirst(
  627.                     lSA,
  628.                         s -> ( (sa.getNome().equals(s.getNome())) && (sa.getTipoSoggettoProprietario().equals(s.getTipoSoggettoProprietario())) && (sa.getNomeSoggettoProprietario().equals(s.getNomeSoggettoProprietario())) )
  629.                         ).isPresent()
  630.                 ) {
  631.                 throw FaultCode.CONFLITTO.toException("Servizio Applicativo giĆ  associato");
  632.             }
  633.            
  634.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, pa.getId().toString());
  635.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SOGGETTO, idSoggettoProprietarioSA.getId().toString());
  636.             env.requestWrapper.overrideParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_AUTORIZZATO, sa.getId().toString());
  637.             if (!env.paHelper.porteAppServizioApplicativoAutorizzatiCheckData(TipoOperazione.ADD)) {
  638.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  639.             }
  640.            
  641.             PortaApplicativaAutorizzazioneServizioApplicativo paSaAutorizzato = new PortaApplicativaAutorizzazioneServizioApplicativo();
  642.             paSaAutorizzato.setNome(sa.getNome());
  643.             paSaAutorizzato.setTipoSoggettoProprietario(idSoggettoProprietarioSA.getTipo());
  644.             paSaAutorizzato.setNomeSoggettoProprietario(idSoggettoProprietarioSA.getNome());

  645.             if(isProfiloModi) {
  646.                 pa.getServiziApplicativiAutorizzati().addServizioApplicativo(paSaAutorizzato);      
  647.             }
  648.             else {
  649.                 pa.getAutorizzazioneToken().getServiziApplicativi().addServizioApplicativo(paSaAutorizzato);
  650.             }
  651.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  652.            
  653.             context.getLogger().info("Invocazione completata con successo");
  654.        
  655.             // Bug Fix: altrimenti viene generato 204
  656.             context.getServletResponse().setStatus(201);
  657.         }
  658.         catch(javax.ws.rs.WebApplicationException e) {
  659.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  660.             throw e;
  661.         }
  662.         catch(Throwable e) {
  663.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  664.             throw FaultCode.ERRORE_INTERNO.toException(e);
  665.         }
  666.     }
  667.    
  668.     /**
  669.      * Aggiunta di ruoli all'elenco dei ruoli autorizzati
  670.      *
  671.      * Questa operazione consente di aggiungere ruoli all'elenco dei ruoli autorizzati
  672.      *
  673.      */
  674.     @Override
  675.     public void addErogazioneControlloAccessiAutorizzazioneRuoli(ControlloAccessiAutorizzazioneRuolo body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  676.         IContext context = this.getContext();
  677.         try {
  678.             context.getLogger().info("Invocazione in corso ...");
  679.            
  680.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  681.             context.getLogger().debug("Autorizzazione completata con successo");
  682.            
  683.             BaseHelper.throwIfNull(body);
  684.            
  685.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  686.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  687.            
  688.             boolean isProfiloModi = env.isProfiloModi();
  689.            
  690.             if ( !TipoAutorizzazione.isRolesRequired(pa.getAutorizzazione()) ) {
  691.                 if(isProfiloModi) {
  692.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione canale per ruoli non ĆØ abilitata per il gruppo scelto");
  693.                 }
  694.                 else {
  695.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione trasporto per ruoli non ĆØ abilitata per il gruppo scelto");
  696.                 }
  697.             }
  698.            
  699.             final RuoliCore ruoliCore = new RuoliCore(env.stationCore);
  700.             BaseHelper.supplyOrNonValida(
  701.                     () -> ruoliCore.getRuolo(body.getRuolo())
  702.                     , "Ruolo " + body.getRuolo()
  703.                 );
  704.            
  705.             if(pa.getRuoli()==null){
  706.                 pa.setRuoli(new AutorizzazioneRuoli());
  707.             }
  708.            
  709.             FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  710.             filtroRuoli.setContesto(RuoloContesto.PORTA_APPLICATIVA);
  711.             filtroRuoli.setTipologia(RuoloTipologia.QUALSIASI);
  712.             if(TipoAutorizzazione.isInternalRolesRequired(pa.getAutorizzazione()) ){
  713.                 filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  714.             }
  715.             else if(TipoAutorizzazione.isExternalRolesRequired(pa.getAutorizzazione()) ){
  716.                 filtroRuoli.setTipologia(RuoloTipologia.ESTERNO);
  717.             }
  718.            
  719.             List<String> ruoliAmmessi = env.stationCore.getAllRuoli(filtroRuoli);
  720.            
  721.             if ( !ruoliAmmessi.contains(body.getRuolo())) {
  722.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + body.getRuolo() + "non ĆØ tra i ruoli ammissibili per il gruppo");
  723.             }
  724.            
  725.             final List<String> ruoliPresenti = pa.getRuoli().getRuoloList().stream().map( r -> r.getNome()).collect(Collectors.toList());
  726.            
  727.             if ( BaseHelper.findFirst( ruoliPresenti, r -> r.equals(body.getRuolo())).isPresent()) {
  728.                 throw FaultCode.CONFLITTO.toException("Il ruolo " + body.getRuolo() + " ĆØ giĆ  associato al gruppo scelto");
  729.             }
  730.            
  731.             if (!env.paHelper.ruoloCheckData(TipoOperazione.ADD, body.getRuolo(), ruoliPresenti)) {
  732.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  733.             }

  734.             Ruolo ruolo = new Ruolo();
  735.             ruolo.setNome(body.getRuolo());
  736.             pa.getRuoli().addRuolo(ruolo);

  737.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  738.             context.getLogger().info("Invocazione completata con successo");
  739.      
  740.             // Bug Fix: altrimenti viene generato 204
  741.             context.getServletResponse().setStatus(201);
  742.         }
  743.         catch(javax.ws.rs.WebApplicationException e) {
  744.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  745.             throw e;
  746.         }
  747.         catch(Throwable e) {
  748.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  749.             throw FaultCode.ERRORE_INTERNO.toException(e);
  750.         }
  751.     }
  752.    
  753.    /**
  754.      * Aggiunta di ruoli all'elenco dei ruoli token autorizzati
  755.      *
  756.      * Questa operazione consente di aggiungere ruoli all'elenco dei ruoli token autorizzati
  757.      *
  758.      */
  759.     @Override
  760.     public void addErogazioneControlloAccessiAutorizzazioneRuoliToken(ControlloAccessiAutorizzazioneRuolo body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  761.         IContext context = this.getContext();
  762.         try {
  763.             context.getLogger().info("Invocazione in corso ...");    

  764.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  765.             context.getLogger().debug("Autorizzazione completata con successo");    
  766.                        
  767.             BaseHelper.throwIfNull(body);
  768.            
  769.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  770.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  771.            
  772.             boolean isProfiloModi = env.isProfiloModi();
  773.            
  774.             if(pa.getAutorizzazioneToken()==null || !StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneRuoli())) {
  775.                 if(isProfiloModi) {
  776.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione messaggio per ruoli non ĆØ abilitata");
  777.                 }
  778.                 else {
  779.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per ruoli non ĆØ abilitata");
  780.                 }
  781.             }
  782.            
  783.             final RuoliCore ruoliCore = new RuoliCore(env.stationCore);
  784.             BaseHelper.supplyOrNonValida(
  785.                     () -> ruoliCore.getRuolo(body.getRuolo())
  786.                     , "Ruolo " + body.getRuolo()
  787.                 );
  788.            
  789.             if(pa.getAutorizzazioneToken()==null) {
  790.                 pa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  791.             }
  792.             if(pa.getAutorizzazioneToken().getRuoli()==null) {
  793.                 pa.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  794.             }
  795.            
  796.             FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  797.             filtroRuoli.setContesto(RuoloContesto.PORTA_APPLICATIVA);
  798.             filtroRuoli.setTipologia(RuoloTipologia.QUALSIASI);
  799.             if(TipoAutorizzazione.isInternalRolesRequired(pa.getAutorizzazione()) ){
  800.                 filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  801.             }
  802.             else if(TipoAutorizzazione.isExternalRolesRequired(pa.getAutorizzazione()) ){
  803.                 filtroRuoli.setTipologia(RuoloTipologia.ESTERNO);
  804.             }
  805.            
  806.             List<String> ruoliAmmessi = env.stationCore.getAllRuoli(filtroRuoli);
  807.            
  808.             if ( !ruoliAmmessi.contains(body.getRuolo())) {
  809.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + body.getRuolo() + "non ĆØ tra i ruoli ammissibili per il gruppo");
  810.             }
  811.            
  812.             final List<String> ruoliPresenti = pa.getAutorizzazioneToken().getRuoli().getRuoloList().stream().map( r -> r.getNome()).collect(Collectors.toList());
  813.            
  814.             if ( BaseHelper.findFirst( ruoliPresenti, r -> r.equals(body.getRuolo())).isPresent()) {
  815.                 throw FaultCode.CONFLITTO.toException("Il ruolo " + body.getRuolo() + " ĆØ giĆ  associato al gruppo scelto");
  816.             }
  817.            
  818.             if (!env.paHelper.ruoloCheckData(TipoOperazione.ADD, body.getRuolo(), ruoliPresenti)) {
  819.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  820.             }

  821.             Ruolo ruolo = new Ruolo();
  822.             ruolo.setNome(body.getRuolo());
  823.             pa.getAutorizzazioneToken().getRuoli().addRuolo(ruolo);

  824.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  825.             context.getLogger().info("Invocazione completata con successo");
  826.      
  827.             // Bug Fix: altrimenti viene generato 204
  828.             context.getServletResponse().setStatus(201);
  829.         }
  830.         catch(javax.ws.rs.WebApplicationException e) {
  831.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  832.             throw e;
  833.         }
  834.         catch(Throwable e) {
  835.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  836.             throw FaultCode.ERRORE_INTERNO.toException(e);
  837.         }
  838.     }

  839.     /**
  840.      * Aggiunta di una proprietĆ  di configurazione
  841.      *
  842.      * Questa operazione consente di registrare una proprietĆ  di configurazione
  843.      *
  844.      */
  845.     @Override
  846.     public void addErogazioneProprieta(org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  847.         IContext context = this.getContext();
  848.         try {
  849.             context.getLogger().info("Invocazione in corso ...");    

  850.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  851.             context.getLogger().debug("Autorizzazione completata con successo");    
  852.                        
  853.             BaseHelper.throwIfNull(body);          
  854.            
  855.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  856.             if(env.paCore==null) {
  857.                 throw new CoreException("PaCore not initialized");
  858.             }
  859.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  860.            
  861.             if ((body.getNome().indexOf(" ") != -1) || (body.getValore().indexOf(" ") != -1)) {
  862.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  863.             }
  864.            
  865.             if(pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  866.                 for (Proprieta p : pa.getProprietaList()) {
  867.                     if(p.getNome().equals(body.getNome())) {
  868.                         throw FaultCode.CONFLITTO.toException("ProprietĆ  " + body.getNome() + " giĆ  assegnata alla configurazione");
  869.                     }
  870.                 }
  871.             }
  872.            
  873.             Proprieta p = new Proprieta();
  874.             p.setNome(body.getNome());
  875.             if(env.paCore!=null && env.paCore.getDriverBYOKUtilities()!=null &&
  876.                     body.isEncrypted()!=null && body.isEncrypted().booleanValue()) {
  877.                 p.setValore(env.paCore.getDriverBYOKUtilities().wrap(body.getValore()));
  878.             }
  879.             else {
  880.                 if(body.getValore().length()>255) {
  881.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_255);
  882.                 }
  883.                 p.setValore(body.getValore());
  884.             }
  885.             pa.addProprieta(p);
  886.            
  887.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  888.             context.getLogger().info("Invocazione completata con successo");
  889.          
  890.             // Bug Fix: altrimenti viene generato 204
  891.             context.getServletResponse().setStatus(201);
  892.          
  893.         }
  894.         catch(javax.ws.rs.WebApplicationException e) {
  895.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  896.             throw e;
  897.         }
  898.         catch(Throwable e) {
  899.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  900.             throw FaultCode.ERRORE_INTERNO.toException(e);
  901.         }
  902.     }

  903.     /**
  904.      * Aggiunta di scope all'elenco degli scope autorizzati
  905.      *
  906.      * Questa operazione consente di aggiungere scope all'elenco degli scope autorizzati
  907.      *
  908.      */
  909.     @Override
  910.     public void addErogazioneControlloAccessiAutorizzazioneScope(ControlloAccessiAutorizzazioneScope body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  911.         IContext context = this.getContext();
  912.         try {
  913.             context.getLogger().info("Invocazione in corso ...");    

  914.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  915.             context.getLogger().debug("Autorizzazione completata con successo");
  916.            
  917.             BaseHelper.throwIfNull(body);          
  918.            
  919.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  920.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  921.            
  922.             if(pa.getScope()==null) {
  923.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione per scope non ĆØ abilitata");
  924.             }
  925.            
  926.             FiltroRicercaScope filtroScope = new FiltroRicercaScope();
  927.             filtroScope.setContesto(ScopeContesto.PORTA_APPLICATIVA);
  928.             filtroScope.setTipologia("");
  929.            
  930.             final List<String> scopeAmmessi = env.stationCore.getAllScope(filtroScope);
  931.             final List<String> scopePresenti = pa.getScope().getScopeList().stream().map(Scope::getNome).collect(Collectors.toList());
  932.            
  933.             if ( !scopeAmmessi.contains(body.getScope())) {
  934.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Scope " + body.getScope() + " non presente fra gli scope ammissibili.");
  935.             }
  936.            
  937.             if ( scopePresenti.contains(body.getScope()) ) {
  938.                 throw FaultCode.CONFLITTO.toException("Scope " + body.getScope() + " giĆ  assegnato al gruppo");
  939.             }
  940.            
  941.             if (!env.paHelper.scopeCheckData(TipoOperazione.ADD, body.getScope(), scopePresenti )) {
  942.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  943.                
  944.             }

  945.             // Inserisco il scope nel db
  946.             Scope scope = new Scope();
  947.             scope.setNome(body.getScope());
  948.             pa.getScope().addScope(scope);

  949.            
  950.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  951.             context.getLogger().info("Invocazione completata con successo");
  952.          
  953.             // Bug Fix: altrimenti viene generato 204
  954.             context.getServletResponse().setStatus(201);
  955.         }
  956.         catch(javax.ws.rs.WebApplicationException e) {
  957.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  958.             throw e;
  959.         }
  960.         catch(Throwable e) {
  961.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  962.             throw FaultCode.ERRORE_INTERNO.toException(e);
  963.         }
  964.     }
  965.    
  966.     /**
  967.      * Aggiunta di una policy di rate limiting
  968.      *
  969.      * Questa operazione consente di aggiungere una policy di rate limiting
  970.      *
  971.      */
  972.     @Override
  973.     public void addErogazioneRateLimitingPolicy(RateLimitingPolicyErogazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  974.         IContext context = this.getContext();
  975.         try {
  976.             context.getLogger().info("Invocazione in corso ...");    

  977.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  978.             context.getLogger().debug("Autorizzazione completata con successo");
  979.            
  980.             BaseHelper.throwIfNull(body);
  981.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  982.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);

  983.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  984.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  985.                     "Accordo Servizio Parte Specifica");
  986.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  987.            
  988.             AttivazionePolicy policy = new AttivazionePolicy();
  989.             policy.setFiltro(new AttivazionePolicyFiltro());
  990.             policy.setGroupBy(new AttivazionePolicyRaggruppamento());
  991.            
  992.             final RuoloPolicy ruoloPorta = RuoloPolicy.APPLICATIVA;
  993.             final String nomePorta = pa.getNome();
  994.            
  995.             String modalita = ErogazioniApiHelper.getDataElementModalita(body.getConfigurazione().getIdentificazione());
  996.            
  997.             String idPolicy = ErogazioniApiHelper.getIdPolicy(body, env.confCore, env.confHelper);
  998.             if(idPolicy==null) {
  999.                 switch (body.getConfigurazione().getIdentificazione()) {
  1000.                 case POLICY:
  1001.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Policy Utente non trovata");
  1002.                 case CRITERI:
  1003.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Policy Built-In non trovata che rispettano i criteri forniti");
  1004.                 }
  1005.             }
  1006.             policy.setIdPolicy(idPolicy);
  1007.            
  1008.             // Questo lo prendo paro paro dal codice della console.
  1009.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  1010.             String serialId = env.confCore.getNextPolicyInstanceSerialId(infoPolicy.getIdPolicy());
  1011.             policy.setIdActivePolicy(ControlloTrafficoDriverUtils.buildIdActivePolicy(infoPolicy.getIdPolicy(), serialId));
  1012.            
  1013.             ErogazioniApiHelper.override(infoPolicy.getTipoRisorsa(), body, env.protocolFactory.getProtocol(), env.idSoggetto.toIDSoggetto(), env.requestWrapper);
  1014.            
  1015.             String errorAttivazione = env.confHelper.readDatiAttivazionePolicyFromHttpParameters(policy, false, TipoOperazione.ADD, infoPolicy);
  1016.             if ( !StringUtils.isEmpty(errorAttivazione) ) {
  1017.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(errorAttivazione));
  1018.             }
  1019.            
  1020.             policy.getFiltro().setEnabled(true);
  1021.             policy.getFiltro().setProtocollo(env.tipo_protocollo);
  1022.             policy.getFiltro().setRuoloPorta(ruoloPorta);
  1023.             policy.getFiltro().setNomePorta(nomePorta);
  1024.        
  1025.             StringBuilder existsMessage = new StringBuilder();
  1026.             if ( ConfigurazioneUtilities.alreadyExists(
  1027.                     TipoOperazione.ADD,
  1028.                     env.confCore,
  1029.                     env.confHelper,
  1030.                     policy,
  1031.                     infoPolicy,
  1032.                     ruoloPorta,
  1033.                     nomePorta,
  1034.                     env.apcCore.toMessageServiceBinding(apc.getServiceBinding()),
  1035.                     existsMessage,
  1036.                     org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE,
  1037.                     modalita
  1038.                 )) {
  1039.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  1040.             }
  1041.            
  1042.             ErogazioniApiHelper.attivazionePolicyCheckData(TipoOperazione.ADD, pa, policy, infoPolicy, env, env.apcCore.toMessageServiceBinding(apc.getServiceBinding()), modalita);
  1043.            
  1044.             // aggiorno prossima posizione nella policy
  1045.             ConfigurazioneUtilities.updatePosizioneAttivazionePolicy(env.confCore, infoPolicy, policy, ruoloPorta, nomePorta);
  1046.            
  1047.             env.confCore.performCreateOperation(env.userLogin, false, policy);

  1048.             context.getLogger().info("Invocazione completata con successo");
  1049.        
  1050.             // Bug Fix: altrimenti viene generato 204
  1051.             context.getServletResponse().setStatus(201);
  1052.         }
  1053.         catch(javax.ws.rs.WebApplicationException e) {
  1054.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1055.             throw e;
  1056.         }
  1057.         catch(Throwable e) {
  1058.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1059.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1060.         }
  1061.     }
  1062.    
  1063.     /**
  1064.      * Aggiunta di una regola di correlazione applicativa
  1065.      *
  1066.      * Questa operazione consente di registrare una regola di correlazione applicativa per la richiesta
  1067.      *
  1068.      */
  1069.     @Override
  1070.     public void addErogazioneTracciamentoCorrelazioneApplicativaRichiesta(CorrelazioneApplicativaRichiesta body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1071.         IContext context = this.getContext();
  1072.         try {
  1073.             context.getLogger().info("Invocazione in corso ...");    

  1074.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1075.             context.getLogger().debug("Autorizzazione completata con successo");
  1076.            
  1077.             BaseHelper.throwIfNull(body);
  1078.            
  1079.             if ( body.getElemento() == null )
  1080.                 body.setElemento("");
  1081.                        
  1082.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1083.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1084.             final Long idPorta = pa.getId();
  1085.            
  1086.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  1087.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  1088.                     "Accordo Servizio Parte Specifica");
  1089.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  1090.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  1091.                        
  1092.             StringBuilder existsMessage = new StringBuilder();
  1093.             if ( ConsoleUtilities.alreadyExistsCorrelazioneApplicativaRichiesta(env.paCore, idPorta, body.getElemento(), 0, existsMessage)) {
  1094.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  1095.             }
  1096.            
  1097.             if ( !correlazioneApplicativaRichiestaCheckData(TipoOperazione.ADD, env.requestWrapper, env.paHelper, false, body, idPorta, null,
  1098.                     serviceBinding) ) {
  1099.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  1100.             }
  1101.                                    
  1102.             CorrelazioneApplicativa ca = pa.getCorrelazioneApplicativa();
  1103.             if (ca == null) {
  1104.                 ca = new CorrelazioneApplicativa();
  1105.             }
  1106.             ca.addElemento(convert(body));
  1107.             pa.setCorrelazioneApplicativa(ca);
  1108.            
  1109.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  1110.                    
  1111.             context.getLogger().info("Invocazione completata con successo");
  1112.      
  1113.             // Bug Fix: altrimenti viene generato 204
  1114.             context.getServletResponse().setStatus(201);
  1115.         }
  1116.         catch(javax.ws.rs.WebApplicationException e) {
  1117.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1118.             throw e;
  1119.         }
  1120.         catch(Throwable e) {
  1121.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1122.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1123.         }
  1124.     }

  1125.     /**
  1126.      * Aggiunta di una regola di correlazione applicativa
  1127.      *
  1128.      * Questa operazione consente di registrare una regola di correlazione applicativa per la risposta
  1129.      *
  1130.      */
  1131.     @Override
  1132.     public void addErogazioneTracciamentoCorrelazioneApplicativaRisposta(CorrelazioneApplicativaRisposta body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1133.         IContext context = this.getContext();
  1134.         try {
  1135.             context.getLogger().info("Invocazione in corso ...");    

  1136.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1137.             context.getLogger().debug("Autorizzazione completata con successo");    
  1138.            
  1139.             BaseHelper.throwIfNull(body);
  1140.            
  1141.             if ( body.getElemento() == null )
  1142.                 body.setElemento("");
  1143.                        
  1144.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1145.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1146.             final Long idPorta = pa.getId();
  1147.            
  1148.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  1149.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  1150.                     "Accordo Servizio Parte Specifica");
  1151.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  1152.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  1153.            
  1154.             StringBuilder existsMessage = new StringBuilder();
  1155.             if ( ConsoleUtilities.alreadyExistsCorrelazioneApplicativaRisposta(env.paCore, idPorta, body.getElemento(), 0, existsMessage)) {
  1156.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  1157.             }
  1158.            
  1159.             if ( !correlazioneApplicativaRispostaCheckData(TipoOperazione.ADD, env.requestWrapper, env.pdHelper, false, body, idPorta, null,
  1160.                     serviceBinding)) {
  1161.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  1162.             }
  1163.                                
  1164.             if ( pa.getCorrelazioneApplicativaRisposta() == null)
  1165.                 pa.setCorrelazioneApplicativaRisposta(new org.openspcoop2.core.config.CorrelazioneApplicativaRisposta());
  1166.            
  1167.             pa.getCorrelazioneApplicativaRisposta().addElemento(convert(body));
  1168.            
  1169.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1170.            
  1171.             context.getLogger().info("Invocazione completata con successo");      
  1172.      
  1173.             // Bug Fix: altrimenti viene generato 204
  1174.             context.getServletResponse().setStatus(201);
  1175.         }
  1176.         catch(javax.ws.rs.WebApplicationException e) {
  1177.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1178.             throw e;
  1179.         }
  1180.         catch(Throwable e) {
  1181.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1182.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1183.         }
  1184.     }
  1185.    
  1186.     /**
  1187.      * Elimina applicativi dall'elenco degli applicativi autorizzati
  1188.      *
  1189.      * Questa operazione consente di eliminare applicativi dall'elenco degli applicativi autorizzati
  1190.      *
  1191.      */
  1192.     @Override
  1193.     public void deleteErogazioneControlloAccessiAutorizzazioneApplicativi(String nome, Integer versione, String applicativoAutorizzato, ProfiloEnum profilo, String soggetto, String soggettoApplicativo, String gruppo, String tipoServizio) {
  1194.         IContext context = this.getContext();
  1195.         try {
  1196.             context.getLogger().info("Invocazione in corso ...");    

  1197.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1198.             context.getLogger().debug("Autorizzazione completata con successo");    
  1199.            
  1200.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1201.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1202.            
  1203.             if (pa.getServiziApplicativiAutorizzati() == null)  
  1204.                 pa.setServiziApplicativiAutorizzati(new PortaApplicativaAutorizzazioneServiziApplicativi());
  1205.            
  1206.             IdSoggetto idSoggettoProprietarioSA = (IdSoggetto) env.idSoggetto.clone();
  1207.             if(org.apache.commons.lang.StringUtils.isNotEmpty(soggettoApplicativo)) {
  1208.                 idSoggettoProprietarioSA.setNome(soggettoApplicativo);
  1209.             }
  1210.            
  1211.             PortaApplicativaAutorizzazioneServizioApplicativo to_remove = BaseHelper.findAndRemoveFirst(pa.getServiziApplicativiAutorizzati().getServizioApplicativoList(), sa ->
  1212.                 (sa.getNome().equals(applicativoAutorizzato) &&
  1213.                 idSoggettoProprietarioSA.getNome().equals(sa.getNomeSoggettoProprietario()) &&
  1214.                 idSoggettoProprietarioSA.getTipo().equals(sa.getTipoSoggettoProprietario())));
  1215.            
  1216.             if (env.delete_404 && to_remove == null) {
  1217.                 throw FaultCode.NOT_FOUND.toException("Nessun Applicativo " + applicativoAutorizzato + " (soggetto: "+idSoggettoProprietarioSA.getNome()+") ĆØ associato al gruppo scelto");
  1218.             } else if (to_remove != null) {
  1219.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1220.             }

  1221.        
  1222.             context.getLogger().info("Invocazione completata con successo");    
  1223.         }
  1224.         catch(javax.ws.rs.WebApplicationException e) {
  1225.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1226.             throw e;
  1227.         }
  1228.         catch(Throwable e) {
  1229.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1230.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1231.         }
  1232.     }
  1233.    
  1234.     /**
  1235.      * Elimina soggetti all'elenco dei soggetti autorizzati
  1236.      *
  1237.      * Questa operazione consente di eliminare soggetti all'elenco dei soggetti autorizzati
  1238.      *
  1239.      */
  1240.     @Override
  1241.     public void deleteErogazioneControlloAccessiAutorizzazioneSoggetti(String nome, Integer versione, String soggettoAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1242.         IContext context = this.getContext();
  1243.         try {
  1244.             context.getLogger().info("Invocazione in corso ...");    

  1245.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1246.             context.getLogger().debug("Autorizzazione completata con successo");    
  1247.                        

  1248.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1249.             PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1250.            
  1251.             if (pa.getSoggetti() == null)   pa.setSoggetti(new PortaApplicativaAutorizzazioneSoggetti());
  1252.            
  1253.             PortaApplicativaAutorizzazioneSoggetto to_remove = BaseHelper.findAndRemoveFirst(pa.getSoggetti().getSoggettoList(), sogg -> sogg.getNome().equals(soggettoAutorizzato));
  1254.            
  1255.             if (env.delete_404 && to_remove == null) {
  1256.                 throw FaultCode.NOT_FOUND.toException("Nessun Soggetto " + soggettoAutorizzato + " ĆØ associato al gruppo scelto");
  1257.             } else if ( to_remove != null ) {
  1258.            
  1259.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1260.             }
  1261.        
  1262.             context.getLogger().info("Invocazione completata con successo");
  1263.        
  1264.      
  1265.         }
  1266.         catch(javax.ws.rs.WebApplicationException e) {
  1267.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1268.             throw e;
  1269.         }
  1270.         catch(Throwable e) {
  1271.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1272.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1273.         }
  1274.     }
  1275.    
  1276.    /**
  1277.      * Elimina applicativi dall'elenco degli applicativi token autorizzati
  1278.      *
  1279.      * Questa operazione consente di eliminare applicativi token dall'elenco degli applicativi autorizzati
  1280.      *
  1281.      */
  1282.     @Override
  1283.     public void deleteErogazioneControlloAccessiAutorizzazioneApplicativiToken(String nome, Integer versione, String applicativoAutorizzato, ProfiloEnum profilo, String soggetto, String soggettoApplicativo, String gruppo, String tipoServizio) {
  1284.         IContext context = this.getContext();
  1285.         try {
  1286.             context.getLogger().info("Invocazione in corso ...");    

  1287.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1288.             context.getLogger().debug("Autorizzazione completata con successo");    
  1289.                        
  1290.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1291.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1292.            
  1293.             boolean isProfiloModi = env.isProfiloModi();
  1294.            
  1295.             if(isProfiloModi) {
  1296.                 if (pa.getServiziApplicativiAutorizzati() == null)  
  1297.                     pa.setServiziApplicativiAutorizzati(new PortaApplicativaAutorizzazioneServiziApplicativi());
  1298.             }
  1299.             else {
  1300.                 if(pa.getAutorizzazioneToken()==null) {
  1301.                     pa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  1302.                 }
  1303.                 if(pa.getAutorizzazioneToken().getServiziApplicativi()==null) {
  1304.                     pa.getAutorizzazioneToken().setServiziApplicativi(new PortaApplicativaAutorizzazioneServiziApplicativi());
  1305.                 }
  1306.             }
  1307.            
  1308.             IdSoggetto idSoggettoProprietarioSA = (IdSoggetto) env.idSoggetto.clone();
  1309.             if(org.apache.commons.lang.StringUtils.isNotEmpty(soggettoApplicativo)) {
  1310.                 idSoggettoProprietarioSA.setNome(soggettoApplicativo);
  1311.             }
  1312.            
  1313.             List<PortaApplicativaAutorizzazioneServizioApplicativo> lSA = null;
  1314.             if(isProfiloModi) {
  1315.                 lSA = pa.getServiziApplicativiAutorizzati().getServizioApplicativoList();
  1316.             }
  1317.             else {
  1318.                 lSA = pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativoList();
  1319.             }
  1320.            
  1321.             PortaApplicativaAutorizzazioneServizioApplicativo to_remove = BaseHelper.findAndRemoveFirst(lSA, sa ->
  1322.                 (sa.getNome().equals(applicativoAutorizzato) &&
  1323.                 idSoggettoProprietarioSA.getNome().equals(sa.getNomeSoggettoProprietario()) &&
  1324.                 idSoggettoProprietarioSA.getTipo().equals(sa.getTipoSoggettoProprietario())));
  1325.            
  1326.             if (env.delete_404 && to_remove == null) {
  1327.                 throw FaultCode.NOT_FOUND.toException("Nessun Applicativo " + applicativoAutorizzato + " (soggetto: "+idSoggettoProprietarioSA.getNome()+") ĆØ associato al gruppo scelto");
  1328.             } else if (to_remove != null) {
  1329.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1330.             }

  1331.        
  1332.             context.getLogger().info("Invocazione completata con successo");    
  1333.         }
  1334.         catch(javax.ws.rs.WebApplicationException e) {
  1335.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1336.             throw e;
  1337.         }
  1338.         catch(Throwable e) {
  1339.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1340.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1341.         }
  1342.     }

  1343.     /**
  1344.      * Elimina ruoli dall'elenco dei ruoli autorizzati
  1345.      *
  1346.      * Questa operazione consente di eliminare ruoli dall'elenco dei ruoli autorizzati
  1347.      *
  1348.      */
  1349.     @Override
  1350.     public void deleteErogazioneControlloAccessiAutorizzazioneRuoli(String nome, Integer versione, String ruoloAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1351.         IContext context = this.getContext();
  1352.         try {
  1353.             context.getLogger().info("Invocazione in corso ...");    

  1354.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1355.             context.getLogger().debug("Autorizzazione completata con successo");    
  1356.                        
  1357.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1358.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1359.            
  1360.             if (pa.getRuoli() == null)  pa.setRuoli(new AutorizzazioneRuoli());
  1361.            
  1362.             Ruolo to_remove = BaseHelper.findAndRemoveFirst(pa.getRuoli().getRuoloList(), r -> r.getNome().equals(ruoloAutorizzato));
  1363.            
  1364.             if (env.delete_404 && to_remove == null) {
  1365.                 throw FaultCode.NOT_FOUND.toException("Nessun Ruolo " + ruoloAutorizzato + " ĆØ associato al gruppo scelto");
  1366.             } else if ( to_remove != null ) {
  1367.            
  1368.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1369.             }
  1370.             context.getLogger().info("Invocazione completata con successo");
  1371.        
  1372.      
  1373.         }
  1374.         catch(javax.ws.rs.WebApplicationException e) {
  1375.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1376.             throw e;
  1377.         }
  1378.         catch(Throwable e) {
  1379.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1380.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1381.         }
  1382.     }
  1383.    
  1384.    /**
  1385.      * Elimina ruoli dall'elenco dei ruoli token autorizzati
  1386.      *
  1387.      * Questa operazione consente di eliminare ruoli dall'elenco dei ruoli token autorizzati
  1388.      *
  1389.      */
  1390.     @Override
  1391.     public void deleteErogazioneControlloAccessiAutorizzazioneRuoliToken(String nome, Integer versione, String ruoloAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1392.         IContext context = this.getContext();
  1393.         try {
  1394.             context.getLogger().info("Invocazione in corso ...");    

  1395.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1396.             context.getLogger().debug("Autorizzazione completata con successo");    
  1397.                        
  1398.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1399.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1400.            
  1401.             if(pa.getAutorizzazioneToken()==null) {
  1402.                 pa.setAutorizzazioneToken(new PortaApplicativaAutorizzazioneToken());
  1403.             }
  1404.             if(pa.getAutorizzazioneToken().getRuoli()==null) {
  1405.                 pa.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  1406.             }
  1407.            
  1408.             Ruolo to_remove = BaseHelper.findAndRemoveFirst(pa.getAutorizzazioneToken().getRuoli().getRuoloList(), r -> r.getNome().equals(ruoloAutorizzato));
  1409.            
  1410.             if (env.delete_404 && to_remove == null) {
  1411.                 throw FaultCode.NOT_FOUND.toException("Nessun Ruolo " + ruoloAutorizzato + " ĆØ associato al gruppo scelto");
  1412.             } else if ( to_remove != null ) {
  1413.            
  1414.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1415.             }
  1416.             context.getLogger().info("Invocazione completata con successo");
  1417.      
  1418.         }
  1419.         catch(javax.ws.rs.WebApplicationException e) {
  1420.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1421.             throw e;
  1422.         }
  1423.         catch(Throwable e) {
  1424.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1425.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1426.         }
  1427.     }

  1428.     /**
  1429.      * Elimina la proprietĆ  di configurazione dall&#x27;elenco di quelle attivate
  1430.      *
  1431.      * Questa operazione consente di eliminare la proprietĆ  di configurazione dall&#x27;elenco di quelle attivate
  1432.      *
  1433.      */
  1434.     @Override
  1435.     public void deleteErogazioneProprietaConfigurazione(String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1436.         IContext context = this.getContext();
  1437.         try {
  1438.             context.getLogger().info("Invocazione in corso ...");    

  1439.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1440.             context.getLogger().debug("Autorizzazione completata con successo");    
  1441.                        
  1442.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1443.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1444.            
  1445.             Proprieta to_remove = null;
  1446.             if(pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  1447.                 to_remove = BaseHelper.findAndRemoveFirst(pa.getProprietaList(), p -> p.getNome().equals(proprieta));
  1448.             }
  1449.            
  1450.             if (env.delete_404 && to_remove == null) {
  1451.                 throw FaultCode.NOT_FOUND.toException("Nessuna proprietĆ  ĆØ presente nella configurazione con nome '"+proprieta+"'");
  1452.             } else if ( to_remove != null ) {
  1453.            
  1454.                 env.pdCore.performUpdateOperation(env.userLogin, false, pa);
  1455.             }
  1456.        
  1457.             context.getLogger().info("Invocazione completata con successo");
  1458.        
  1459.         }
  1460.         catch(javax.ws.rs.WebApplicationException e) {
  1461.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1462.             throw e;
  1463.         }
  1464.         catch(Throwable e) {
  1465.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1466.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1467.         }
  1468.     }

  1469.     /**
  1470.      * Elimina scope dall'elenco degli scope autorizzati
  1471.      *
  1472.      * Questa operazione consente di eliminare scope dall'elenco degli scope autorizzati
  1473.      *
  1474.      */
  1475.     @Override
  1476.     public void deleteErogazioneControlloAccessiAutorizzazioneScope(String nome, Integer versione, String scopeAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1477.         IContext context = this.getContext();
  1478.         try {
  1479.             context.getLogger().info("Invocazione in corso ...");    

  1480.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1481.             context.getLogger().debug("Autorizzazione completata con successo");    
  1482.            
  1483.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1484.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1485.            
  1486.             if (pa.getScope() == null)  pa.setScope(new AutorizzazioneScope());
  1487.            
  1488.             Scope to_remove = BaseHelper.findAndRemoveFirst(pa.getScope().getScopeList(), s -> s.getNome().equals(scopeAutorizzato));
  1489.            
  1490.             if (env.delete_404 && to_remove == null) {
  1491.                 throw FaultCode.NOT_FOUND.toException("Nessuno Scope " + scopeAutorizzato + " ĆØ associato al gruppo scelto");
  1492.             } else if ( to_remove != null ) {
  1493.            
  1494.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1495.             }
  1496.        
  1497.             context.getLogger().info("Invocazione completata con successo");
  1498.        
  1499.      
  1500.         }
  1501.         catch(javax.ws.rs.WebApplicationException e) {
  1502.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1503.             throw e;
  1504.         }
  1505.         catch(Throwable e) {
  1506.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1507.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1508.         }
  1509.     }
  1510.    
  1511.     /**
  1512.      * Elimina la policy dall'elenco delle policies attive
  1513.      *
  1514.      * Questa operazione consente di eliminare la policy dall'elenco delle policies attive
  1515.      *
  1516.      */
  1517.     @Override
  1518.     public void deleteErogazioneRateLimitingPolicy(String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1519.         IContext context = this.getContext();
  1520.         try {
  1521.             context.getLogger().info("Invocazione in corso ...");    

  1522.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1523.             context.getLogger().debug("Autorizzazione completata con successo");    
  1524.                        
  1525.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1526.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1527.            
  1528.             List<AttivazionePolicy> policies = env.confCore.attivazionePolicyList(null, RuoloPolicy.APPLICATIVA, pa.getNome());
  1529.             AttivazionePolicy policy = BaseHelper.findFirst( policies, p -> (PolicyUtilities.getNomeActivePolicy(p.getAlias(),p.getIdActivePolicy())).equals(idPolicy) ).orElse(null);
  1530.            
  1531.             if ( policy != null ) {
  1532.                 StringBuilder inUsoMessage = new StringBuilder();
  1533.                 List<AttivazionePolicy> policyRimosse = new ArrayList<AttivazionePolicy>();
  1534.                
  1535.                 ConfigurazioneUtilities.deleteAttivazionePolicy(
  1536.                         new ArrayList<AttivazionePolicy>(Arrays.asList( policy )),
  1537.                         env.confHelper,
  1538.                         env.confCore,
  1539.                         env.userLogin,
  1540.                         inUsoMessage,
  1541.                         org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE, policyRimosse
  1542.                     );
  1543.                
  1544.                 if ( inUsoMessage.length() > 0 ) {
  1545.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  1546.                 }
  1547.                
  1548.             }
  1549.             else if ( env.delete_404 ) {
  1550.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con id " + idPolicy );
  1551.             }
  1552.        
  1553.             context.getLogger().info("Invocazione completata con successo");
  1554.      
  1555.         }
  1556.         catch(javax.ws.rs.WebApplicationException e) {
  1557.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1558.             throw e;
  1559.         }
  1560.         catch(Throwable e) {
  1561.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1562.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1563.         }
  1564.     }
  1565.    
  1566.     /**
  1567.      * Elimina la regola di correlazione applicativa dall'elenco di quelle attivate per la richiesta
  1568.      *
  1569.      * Questa operazione consente di eliminare la regola di correlazione applicativa dall'elenco di quelle attivate per la richiesta
  1570.      *
  1571.      */
  1572.     @Override
  1573.     public void deleteErogazioneTracciamentoCorrelazioneApplicativaRichiesta(String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1574.         IContext context = this.getContext();
  1575.         try {
  1576.             context.getLogger().info("Invocazione in corso ...");    

  1577.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1578.             context.getLogger().debug("Autorizzazione completata con successo");    
  1579.                        
  1580.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1581.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1582.            
  1583.             final CorrelazioneApplicativa correlazioneApplicativa = pa.getCorrelazioneApplicativa();
  1584.            
  1585.             final String searchElemento = elemento.equals("*")
  1586.                     ? ""
  1587.                     : elemento;
  1588.                                    
  1589.             CorrelazioneApplicativaElemento to_del = BaseHelper.evalnull( () -> BaseHelper.findAndRemoveFirst(
  1590.                     correlazioneApplicativa.getElementoList(),
  1591.                     e -> (e.getNome()==null ? "" : e.getNome()).equals(searchElemento)
  1592.                 ));
  1593.            
  1594.             if ( to_del != null ) {
  1595.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1596.             }
  1597.            
  1598.             else if (env.delete_404) {
  1599.                 throw FaultCode.NOT_FOUND.toException("Correlazione applicativa per l'elemento " + elemento + " non trovata");
  1600.             }
  1601.                
  1602.            
  1603.             context.getLogger().info("Invocazione completata con successo");    
  1604.         }
  1605.         catch(javax.ws.rs.WebApplicationException e) {
  1606.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1607.             throw e;
  1608.         }
  1609.         catch(Throwable e) {
  1610.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1611.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1612.         }
  1613.     }
  1614.    
  1615.     /**
  1616.      * Elimina la regola di correlazione applicativa dall'elenco di quelle attivate per la risposta
  1617.      *
  1618.      * Questa operazione consente di eliminare la regola di correlazione applicativa dall'elenco di quelle attivate per la risposta
  1619.      *
  1620.      */
  1621.     @Override
  1622.     public void deleteErogazioneTracciamentoCorrelazioneApplicativaRisposta(String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1623.         IContext context = this.getContext();
  1624.         try {
  1625.             context.getLogger().info("Invocazione in corso ...");    

  1626.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1627.             context.getLogger().debug("Autorizzazione completata con successo");    
  1628.                        
  1629.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1630.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1631.            
  1632.             org.openspcoop2.core.config.CorrelazioneApplicativaRisposta correlazioneApplicativa = pa.getCorrelazioneApplicativaRisposta();
  1633.            
  1634.             final String searchElemento = elemento.equals("*")
  1635.                     ? ""
  1636.                     : elemento;
  1637.                                    
  1638.             CorrelazioneApplicativaRispostaElemento to_del = BaseHelper.evalnull( () -> BaseHelper.findAndRemoveFirst(
  1639.                     correlazioneApplicativa.getElementoList(),
  1640.                     e -> (e.getNome()==null ? "" : e.getNome()).equals(searchElemento)
  1641.                 ));
  1642.            
  1643.             if ( to_del != null ) {
  1644.                 env.paCore.performUpdateOperation(env.userLogin, false, pa);
  1645.             }
  1646.            
  1647.             else if (env.delete_404) {
  1648.                 throw FaultCode.NOT_FOUND.toException("Correlazione applicativa per l'elemento " + elemento + " non trovata");
  1649.             }        
  1650.             context.getLogger().info("Invocazione completata con successo");
  1651.        
  1652.      
  1653.         }
  1654.         catch(javax.ws.rs.WebApplicationException e) {
  1655.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1656.             throw e;
  1657.         }
  1658.         catch(Throwable e) {
  1659.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1660.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1661.         }
  1662.     }
  1663.    
  1664.     /**
  1665.      * Restituisce la policy XACML associata all'autorizzazione
  1666.      *
  1667.      * Questa operazione consente di ottenere la policy XACML associata all'autorizzazione
  1668.      *
  1669.      */
  1670.     @Override
  1671.     public byte[] downloadErogazioneControlloAccessiAutorizzazioneXacmlPolicy(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1672.         IContext context = this.getContext();
  1673.         try {
  1674.             context.getLogger().info("Invocazione in corso ...");    

  1675.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1676.             context.getLogger().debug("Autorizzazione completata con successo");    
  1677.            
  1678.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1679.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1680.            
  1681.             if (pa.getXacmlPolicy() == null)
  1682.                 throw FaultCode.NOT_FOUND.toException("Xacml policy non assegnata al gruppo scelto");
  1683.            
  1684.             context.getLogger().info("Invocazione completata con successo");
  1685.             return BaseHelper.evalnull( () -> pa.getXacmlPolicy().getBytes() );

  1686.         }
  1687.         catch(javax.ws.rs.WebApplicationException e) {
  1688.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1689.             throw e;
  1690.         }
  1691.         catch(Throwable e) {
  1692.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1693.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1694.         }
  1695.     }
  1696.    
  1697.     /**
  1698.      * Restituisce l'elenco delle policy di rate limiting configurate
  1699.      *
  1700.      * Questa operazione consente di ottenere l'elenco delle policy di rate limiting configurate
  1701.      *
  1702.      */
  1703.     @Override
  1704.     public ListaRateLimitingPolicy findAllErogazioneRateLimitingPolicies(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset, RateLimitingCriteriMetricaEnum metrica) {
  1705.         IContext context = this.getContext();
  1706.         try {
  1707.             context.getLogger().info("Invocazione in corso ...");    

  1708.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1709.             context.getLogger().debug("Autorizzazione completata con successo");    
  1710.            
  1711.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1712.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1713.            
  1714.             final int idLista = Liste.CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY;
  1715.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1716.             if(metrica!=null) {
  1717.                 String risorsa = ErogazioniApiHelper.getDataElementModalitaRisorsa(metrica);
  1718.                 ricerca.addFilter(idLista, Filtri.FILTRO_TIPO_RISORSA_POLICY, risorsa);
  1719.             }
  1720.             List<AttivazionePolicy> policies = env.confCore.attivazionePolicyList(ricerca, RuoloPolicy.APPLICATIVA, pa.getNome());

  1721.             if ( env.findall_404 && policies.isEmpty() ) {
  1722.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting associata");
  1723.             }
  1724.            
  1725.             ListaRateLimitingPolicy ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1726.                     ricerca.getIndexIniziale(idLista),
  1727.                     ricerca.getPageSize(idLista),
  1728.                     ricerca.getNumEntries(idLista), ListaRateLimitingPolicy.class);
  1729.            
  1730.             policies.forEach( p -> {
  1731.                 RateLimitingPolicyItem item = new RateLimitingPolicyItem();
  1732.                 item.setNome(PolicyUtilities.getNomeActivePolicy(p.getAlias(), p.getIdActivePolicy()));
  1733.                 ret.addItemsItem(item);
  1734.             });
  1735.                              
  1736.             context.getLogger().info("Invocazione completata con successo");
  1737.             return ret;
  1738.      
  1739.         }
  1740.         catch(javax.ws.rs.WebApplicationException e) {
  1741.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1742.             throw e;
  1743.         }
  1744.         catch(Throwable e) {
  1745.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1746.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1747.         }
  1748.     }
  1749.    
  1750.     /**
  1751.      * Restituisce l'elenco delle regole di correlazione applicativa per la richiesta
  1752.      *
  1753.      * Questa operazione consente di ottenere l'elenco delle regole di correlazione applicativa per la richiesta
  1754.      *
  1755.      */
  1756.     @Override
  1757.     public ListaCorrelazioneApplicativaRichiesta findAllErogazioneTracciamentoCorrelazioneApplicativaRichiesta(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset) {
  1758.         IContext context = this.getContext();
  1759.         try {
  1760.             context.getLogger().info("Invocazione in corso ...");    

  1761.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1762.             context.getLogger().debug("Autorizzazione completata con successo");
  1763.            
  1764.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1765.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1766.            
  1767.             final int idLista = Liste.PORTE_APPLICATIVE_CORRELAZIONE_APPLICATIVA;
  1768.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1769.            
  1770.             List<CorrelazioneApplicativaElemento> lista = env.paCore.porteApplicativeCorrelazioneApplicativaList(pa.getId().intValue(), ricerca);

  1771.             if ( env.findall_404 && lista.isEmpty() ) {
  1772.                 throw FaultCode.NOT_FOUND.toException("Nessuna regola di correlazione applicativa associata");
  1773.             }
  1774.            
  1775.             ListaCorrelazioneApplicativaRichiesta ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1776.                     ricerca.getIndexIniziale(idLista),
  1777.                     ricerca.getPageSize(idLista),
  1778.                     ricerca.getNumEntries(idLista), ListaCorrelazioneApplicativaRichiesta.class);
  1779.            
  1780.             lista.forEach( c -> {
  1781.                 CorrelazioneApplicativaRichiestaItem item = new CorrelazioneApplicativaRichiestaItem();
  1782.                 item.setElemento( StringUtils.isEmpty(c.getNome())
  1783.                         ? "*"
  1784.                         : c.getNome()
  1785.                     );
  1786.                
  1787.                 item.setIdentificazioneTipo(CorrelazioneApplicativaRichiestaEnum.valueOf(c.getIdentificazione().name()));
  1788.                 ret.addItemsItem(item);
  1789.             });

  1790.             context.getLogger().info("Invocazione completata con successo");
  1791.             return ret;
  1792.      
  1793.         }
  1794.         catch(javax.ws.rs.WebApplicationException e) {
  1795.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1796.             throw e;
  1797.         }
  1798.         catch(Throwable e) {
  1799.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1800.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1801.         }
  1802.     }
  1803.    
  1804.     /**
  1805.      * Restituisce l'elenco delle regole di correlazione applicativa per la risposta
  1806.      *
  1807.      * Questa operazione consente di ottenere l'elenco delle regole di correlazione applicativa per la risposta
  1808.      *
  1809.      */
  1810.     @Override
  1811.     public ListaCorrelazioneApplicativaRisposta findAllErogazioneTracciamentoCorrelazioneApplicativaRisposta(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset) {
  1812.         IContext context = this.getContext();
  1813.         try {
  1814.             context.getLogger().info("Invocazione in corso ...");    

  1815.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1816.             context.getLogger().debug("Autorizzazione completata con successo");    
  1817.                        
  1818.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1819.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1820.            
  1821.             final int idLista = Liste.PORTE_APPLICATIVE_CORRELAZIONE_APPLICATIVA_RISPOSTA;
  1822.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1823.            
  1824.             List<CorrelazioneApplicativaRispostaElemento> lista = env.paCore.porteApplicativeCorrelazioneApplicativaRispostaList(pa.getId().intValue(), ricerca);

  1825.             if ( env.findall_404 && lista.isEmpty() ) {
  1826.                 throw FaultCode.NOT_FOUND.toException("Nessuna regola di correlazione applicativa della risposta associata");
  1827.             }
  1828.            
  1829.             ListaCorrelazioneApplicativaRisposta ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1830.                     ricerca.getIndexIniziale(idLista),
  1831.                     ricerca.getPageSize(idLista),
  1832.                     ricerca.getNumEntries(idLista), ListaCorrelazioneApplicativaRisposta.class);
  1833.            
  1834.             lista.forEach( c -> {
  1835.                 CorrelazioneApplicativaRispostaItem item = new CorrelazioneApplicativaRispostaItem();
  1836.                 item.setElemento( StringUtils.isEmpty(c.getNome())
  1837.                         ? "*"
  1838.                         : c.getNome()
  1839.                     );              item.setIdentificazioneTipo(CorrelazioneApplicativaRispostaEnum.valueOf(c.getIdentificazione().name()));
  1840.                 ret.addItemsItem(item);
  1841.             });        
  1842.            
  1843.             context.getLogger().info("Invocazione completata con successo");
  1844.             return ret;
  1845.      
  1846.         }
  1847.         catch(javax.ws.rs.WebApplicationException e) {
  1848.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1849.             throw e;
  1850.         }
  1851.         catch(Throwable e) {
  1852.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1853.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1854.         }
  1855.     }
  1856.    
  1857.     /**
  1858.      * Restituisce la configurazione relativa al caching delle risposte
  1859.      *
  1860.      * Questa operazione consente di ottenere la configurazione relativa al caching delle risposte
  1861.      *
  1862.      */
  1863.     @Override
  1864.     public CachingRisposta getErogazioneCachingRisposta(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1865.         IContext context = this.getContext();
  1866.         try {
  1867.             context.getLogger().info("Invocazione in corso ...");    

  1868.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1869.             context.getLogger().debug("Autorizzazione completata con successo");
  1870.            

  1871.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1872.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1873.            
  1874.             CachingRisposta ret = ErogazioniApiHelper.buildCachingRisposta(pa.getResponseCaching());
  1875.                      
  1876.        
  1877.             context.getLogger().info("Invocazione completata con successo");
  1878.             return ret;
  1879.      
  1880.         }
  1881.         catch(javax.ws.rs.WebApplicationException e) {
  1882.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1883.             throw e;
  1884.         }
  1885.         catch(Throwable e) {
  1886.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1887.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1888.         }
  1889.     }
  1890.    
  1891.     /**
  1892.      * Restituisce il canale associato all'erogazione
  1893.      *
  1894.      * Questa operazione consente di ottenere il canale associato all'erogazione
  1895.      *
  1896.      */
  1897.     @Override
  1898.     public ApiCanale getErogazioneCanale(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  1899.         IContext context = this.getContext();
  1900.         try {
  1901.             context.getLogger().info("Invocazione in corso ...");    

  1902.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1903.             context.getLogger().debug("Autorizzazione completata con successo");    
  1904.                        
  1905.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  1906.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  1907.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  1908.            
  1909.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  1910.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  1911.            
  1912.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  1913.             ApiCanale canale = ErogazioniApiHelper.toApiCanale(env, pa, apc, true);
  1914.            
  1915.             context.getLogger().info("Invocazione completata con successo");
  1916.             return canale;
  1917.      
  1918.         }
  1919.         catch(javax.ws.rs.WebApplicationException e) {
  1920.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1921.             throw e;
  1922.         }
  1923.         catch(Throwable e) {
  1924.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1925.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1926.         }
  1927.     }

  1928.     /**
  1929.      * Restituisce la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  1930.      *
  1931.      * Questa operazione consente di ottenere la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  1932.      *
  1933.      */
  1934.     @Override
  1935.     public ControlloAccessiAutenticazione getErogazioneControlloAccessiAutenticazione(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1936.         IContext context = this.getContext();
  1937.         try {
  1938.             context.getLogger().info("Invocazione in corso ...");    

  1939.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1940.             context.getLogger().debug("Autorizzazione completata con successo");    
  1941.            
  1942.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  1943.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  1944.            
  1945.             OneOfControlloAccessiAutenticazioneAutenticazione autRet = null;
  1946.             TipoAutenticazioneEnum tipoAutenticazione = null;
  1947.             if ( TipoAutenticazione.toEnumConstant(pa.getAutenticazione()) == null ) {
  1948.                 tipoAutenticazione = TipoAutenticazioneEnum.CUSTOM;
  1949.             }
  1950.             else {      
  1951.                 tipoAutenticazione = Enums.dualizeMap(Enums.tipoAutenticazioneFromRest).get(TipoAutenticazione.toEnumConstant(pa.getAutenticazione())) ;
  1952.             }
  1953.            
  1954.             ControlloAccessiAutenticazioneToken token = BaseHelper.evalnull( () -> pa.getGestioneToken().getAutenticazione() ) != null
  1955.                     ? ErogazioniApiHelper.fromGestioneTokenAutenticazione(pa.getGestioneToken().getAutenticazione())
  1956.                     : null;        
  1957.                    
  1958.             switch(tipoAutenticazione) {
  1959.             case HTTP_BASIC: {
  1960.                 APIImplAutenticazioneBasic authnBasic = new APIImplAutenticazioneBasic();
  1961.                 authnBasic.setTipo(tipoAutenticazione);
  1962.                 authnBasic.setOpzionale(Helper.statoFunzionalitaConfToBool( pa.getAutenticazioneOpzionale() ));
  1963.                 autRet = authnBasic;
  1964.                
  1965.                 Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazioneBasic.CLEAN_HEADER_AUTHORIZATION.equals(p.getNome())).findAny();
  1966.                 if (prop.isPresent() && prop.get().getValore().equals(ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_TRUE))
  1967.                     authnBasic.setForward(false);
  1968.                 else
  1969.                     authnBasic.setForward(true);

  1970.                 break;
  1971.             }
  1972.             case HTTPS: {
  1973.                 APIImplAutenticazioneHttps authnHttps = new APIImplAutenticazioneHttps();
  1974.                 authnHttps.setTipo(tipoAutenticazione);
  1975.                 authnHttps.setOpzionale(Helper.statoFunzionalitaConfToBool( pa.getAutenticazioneOpzionale() ));
  1976.                 autRet = authnHttps;
  1977.                
  1978.                 break;
  1979.             }
  1980.             case PRINCIPAL: {
  1981.                
  1982.                 APIImplAutenticazionePrincipal authnPrincipal = new APIImplAutenticazionePrincipal();
  1983.                 authnPrincipal.setTipo(tipoAutenticazione);
  1984.                 authnPrincipal.setOpzionale(Helper.statoFunzionalitaConfToBool( pa.getAutenticazioneOpzionale() ));
  1985.                 autRet = authnPrincipal;
  1986.                
  1987.                 TipoAutenticazionePrincipal tipoAuthnPrincipal = pa.getProprietaAutenticazioneList()
  1988.                         .stream()
  1989.                         .filter( p -> ParametriAutenticazionePrincipal.TIPO_AUTENTICAZIONE.equals(p.getNome()))
  1990.                         .map( p -> TipoAutenticazionePrincipal.toEnumConstant(p.getValore()) )
  1991.                         .findAny()
  1992.                         .orElse(TipoAutenticazionePrincipal.CONTAINER);
  1993.                 authnPrincipal.setTipoPrincipal(Enums.dualizeMap(Enums.tipoAutenticazionePrincipalFromRest).get(tipoAuthnPrincipal));
  1994.                
  1995.                 switch (authnPrincipal.getTipoPrincipal()) {
  1996.                 case CONTAINER:
  1997.                 case IP_ADDRESS:
  1998.                 case IP_ADDRESS_FORWARDED_FOR:
  1999.                     break;
  2000.                 case HEADER_BASED: {
  2001.                     Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  2002.                     if (prop.isPresent()) authnPrincipal.setNome(prop.get().getValore());                  
  2003.                     break;
  2004.                 }
  2005.                 case FORM_BASED: {
  2006.                     Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  2007.                     if (prop.isPresent()) authnPrincipal.setNome(prop.get().getValore());                  
  2008.                     break;
  2009.                 }
  2010.                 case URL_BASED: {
  2011.                     Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.PATTERN.equals(p.getNome())).findAny();
  2012.                     if (prop.isPresent()) authnPrincipal.setPattern(prop.get().getValore());
  2013.                     break;
  2014.                 }
  2015.                 case TOKEN: {
  2016.                     Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.TOKEN_CLAIM.equals(p.getNome())).findAny();
  2017.                     if (prop.isPresent()) {
  2018.                         if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_SUBJECT.equals(prop.get().getValore())) {
  2019.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.SUBJECT);
  2020.                         }
  2021.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CLIENT_ID.equals(prop.get().getValore())) {
  2022.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.CLIENTID);
  2023.                         }
  2024.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_USERNAME.equals(prop.get().getValore())) {
  2025.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.USERNAME);
  2026.                         }
  2027.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_EMAIL.equals(prop.get().getValore())) {
  2028.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.EMAIL);
  2029.                         }
  2030.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CUSTOM.equals(prop.get().getValore())) {
  2031.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.CUSTOM);
  2032.                            
  2033.                             Optional<Proprieta> propName = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  2034.                             if (propName.isPresent()) authnPrincipal.setNome(propName.get().getValore());
  2035.                         }
  2036.                     }
  2037.                     break;
  2038.                 }
  2039.                 }   // switch config.getTipo
  2040.                
  2041.                 // IsForward
  2042.                 Optional<Proprieta> prop = pa.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL.equals(p.getNome())).findAny();
  2043.                 if (prop.isPresent() && ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_TRUE.equals(prop.get().getValore()))
  2044.                     authnPrincipal.setForward(false);
  2045.                 else
  2046.                     authnPrincipal.setForward(true);
  2047.                
  2048.                 break;
  2049.             }  // case principal
  2050.            
  2051.             case API_KEY: {
  2052.                
  2053.                 APIImplAutenticazioneApiKey authnApiKey = new APIImplAutenticazioneApiKey();
  2054.                 authnApiKey.setTipo(tipoAutenticazione);
  2055.                 authnApiKey.setOpzionale(Helper.statoFunzionalitaConfToBool( pa.getAutenticazioneOpzionale() ));
  2056.                 autRet = authnApiKey;
  2057.            
  2058.                 if(pa.getProprietaAutenticazioneList()!=null && pa.sizeProprietaAutenticazioneList()>0) {
  2059.                    
  2060.                     APIImplAutenticazioneApiKeyPosizione posizione = null;
  2061.                     APIImplAutenticazioneApiKeyConfig apiKeyNomi = null;
  2062.                     APIImplAutenticazioneApiKeyConfig appIdNomi = null;
  2063.                     boolean useOasNames = false;
  2064.                    
  2065.                     for (Proprieta proprieta : pa.getProprietaAutenticazioneList()) {
  2066.                         String nomeP = proprieta.getNome();
  2067.                         String valoreP = proprieta.getValore();
  2068.                         if(ParametriAutenticazioneApiKey.APP_ID.equals(nomeP)) {
  2069.                             authnApiKey.setAppId(ParametriAutenticazioneApiKey.APP_ID_TRUE.equals(valoreP));
  2070.                         }
  2071.                         else if(ParametriAutenticazioneApiKey.QUERY_PARAMETER.equals(nomeP)) {
  2072.                             if(posizione==null) {
  2073.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  2074.                             }
  2075.                             posizione.setQueryParameter(ParametriAutenticazioneApiKey.QUERY_PARAMETER_TRUE.equals(valoreP));
  2076.                         }
  2077.                         else if(ParametriAutenticazioneApiKey.HEADER.equals(nomeP)) {
  2078.                             if(posizione==null) {
  2079.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  2080.                             }
  2081.                             posizione.setHeader(ParametriAutenticazioneApiKey.HEADER_TRUE.equals(valoreP));
  2082.                         }
  2083.                         else if(ParametriAutenticazioneApiKey.COOKIE.equals(nomeP)) {
  2084.                             if(posizione==null) {
  2085.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  2086.                             }
  2087.                             posizione.setCookie(ParametriAutenticazioneApiKey.COOKIE_TRUE.equals(valoreP));
  2088.                         }
  2089.                         else if(ParametriAutenticazioneApiKey.USE_OAS3_NAMES.equals(nomeP)) {
  2090.                             useOasNames = ParametriAutenticazioneApiKey.USE_OAS3_NAMES_TRUE.equals(valoreP);
  2091.                         }  
  2092.                         else if(ParametriAutenticazioneApiKey.CLEAN_API_KEY.equals(nomeP)) {
  2093.                             boolean clean = ParametriAutenticazioneApiKey.CLEAN_API_KEY_TRUE.equals(valoreP);
  2094.                             authnApiKey.setApiKeyForward(!clean);
  2095.                         }
  2096.                         else if(ParametriAutenticazioneApiKey.CLEAN_APP_ID.equals(nomeP)) {
  2097.                             boolean clean = ParametriAutenticazioneApiKey.CLEAN_APP_ID_TRUE.equals(valoreP);
  2098.                             authnApiKey.setAppIdForward(!clean);
  2099.                         }
  2100.                     }
  2101.                    
  2102.                     if(!useOasNames) {
  2103.                         for (Proprieta proprieta : pa.getProprietaAutenticazioneList()) {
  2104.                             String nomeP = proprieta.getNome();
  2105.                             String valoreP = proprieta.getValore();
  2106.                             if(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_API_KEY.equals(nomeP)) {
  2107.                                 if(apiKeyNomi==null) {
  2108.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  2109.                                 }
  2110.                                 apiKeyNomi.setQueryParameter(valoreP);
  2111.                             }
  2112.                             else if(ParametriAutenticazioneApiKey.NOME_HEADER_API_KEY.equals(nomeP)) {
  2113.                                 if(apiKeyNomi==null) {
  2114.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  2115.                                 }
  2116.                                 apiKeyNomi.setHeader(valoreP);
  2117.                             }
  2118.                             else if(ParametriAutenticazioneApiKey.NOME_COOKIE_API_KEY.equals(nomeP)) {
  2119.                                 if(apiKeyNomi==null) {
  2120.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  2121.                                 }
  2122.                                 apiKeyNomi.setCookie(valoreP);
  2123.                             }
  2124.                             else if(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_APP_ID.equals(nomeP)) {
  2125.                                 if(appIdNomi==null) {
  2126.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  2127.                                 }
  2128.                                 appIdNomi.setQueryParameter(valoreP);
  2129.                             }
  2130.                             else if(ParametriAutenticazioneApiKey.NOME_HEADER_APP_ID.equals(nomeP)) {
  2131.                                 if(appIdNomi==null) {
  2132.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  2133.                                 }
  2134.                                 appIdNomi.setHeader(valoreP);
  2135.                             }
  2136.                             else if(ParametriAutenticazioneApiKey.NOME_COOKIE_APP_ID.equals(nomeP)) {
  2137.                                 if(appIdNomi==null) {
  2138.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  2139.                                 }
  2140.                                 appIdNomi.setCookie(valoreP);
  2141.                             }
  2142.                         }
  2143.                     }
  2144.                    
  2145.                     authnApiKey.setPosizione(posizione);
  2146.                     authnApiKey.setApiKeyNomi(apiKeyNomi);
  2147.                     authnApiKey.setAppIdNomi(appIdNomi);
  2148.                 }
  2149.                
  2150.                 break;
  2151.             }  // case api-key
  2152.            
  2153.             case CUSTOM: {
  2154.                 APIImplAutenticazioneCustom authnCustom = new APIImplAutenticazioneCustom();
  2155.                 authnCustom.setTipo(tipoAutenticazione);
  2156.                 authnCustom.setOpzionale(Helper.statoFunzionalitaConfToBool( pa.getAutenticazioneOpzionale() ));
  2157.                 autRet = authnCustom;
  2158.                
  2159.                 authnCustom.setNome(pa.getAutenticazione());
  2160.                
  2161.                 break;
  2162.             }
  2163.             default:
  2164.                 break;
  2165.             }  // switch autRet.getTipo
  2166.            
  2167.             ControlloAccessiAutenticazione ret = new ControlloAccessiAutenticazione();
  2168.             ret.setAutenticazione(autRet);
  2169.             ret.setToken(token);
  2170.             context.getLogger().info("Invocazione completata con successo");
  2171.             return ret;
  2172.      
  2173.         }
  2174.         catch(javax.ws.rs.WebApplicationException e) {
  2175.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2176.             throw e;
  2177.         }
  2178.         catch(Throwable e) {
  2179.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2180.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2181.         }
  2182.     }

  2183.     /**
  2184.      * Restituisce la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  2185.      *
  2186.      * Questa operazione consente di ottenere la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  2187.      *
  2188.      */
  2189.     @Override
  2190.     public ControlloAccessiAutorizzazioneView getErogazioneControlloAccessiAutorizzazione(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2191.         IContext context = this.getContext();
  2192.         try {
  2193.             context.getLogger().info("Invocazione in corso ...");    

  2194.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2195.             context.getLogger().debug("Autorizzazione completata con successo");    
  2196.            

  2197.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2198.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2199.            
  2200.             ControlloAccessiAutorizzazioneView ret = ErogazioniApiHelper.controlloAccessiAutorizzazioneFromPA(pa);
  2201.            
  2202.             return ret;
  2203.      
  2204.         }
  2205.         catch(javax.ws.rs.WebApplicationException e) {
  2206.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2207.             throw e;
  2208.         }
  2209.         catch(Throwable e) {
  2210.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2211.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2212.         }
  2213.     }

  2214.     /**
  2215.      * Restituisce l'elenco degli applicativi autorizzati
  2216.      *
  2217.      * Questa operazione consente di ottenere l'elenco degli applicativi autorizzati
  2218.      *
  2219.      */
  2220.     @Override
  2221.     public ControlloAccessiErogazioneAutorizzazioneApplicativi getErogazioneControlloAccessiAutorizzazioneApplicativi(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2222.         IContext context = this.getContext();
  2223.         try {
  2224.             context.getLogger().info("Invocazione in corso ...");    

  2225.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2226.             context.getLogger().debug("Autorizzazione completata con successo");    
  2227.            
  2228.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2229.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2230.             ControlloAccessiErogazioneAutorizzazioneApplicativi ret = new ControlloAccessiErogazioneAutorizzazioneApplicativi();
  2231.            
  2232.             int idLista = Liste.PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_AUTORIZZATO;
  2233.             ConsoleSearch ricerca = Helper.setupRicercaPaginata("", -1, 0, idLista);
  2234.             List<PortaApplicativaAutorizzazioneServizioApplicativo> lista = env.paCore.porteAppServiziApplicativiAutorizzatiList(pa.getId(), ricerca);
  2235.            
  2236.             if(lista!=null && !lista.isEmpty()) {
  2237.                 for (PortaApplicativaAutorizzazioneServizioApplicativo portaApplicativaAutorizzazioneServizioApplicativo : lista) {
  2238.                     ControlloAccessiErogazioneAutorizzazioneApplicativo applicativiItem = new ControlloAccessiErogazioneAutorizzazioneApplicativo();
  2239.                     applicativiItem.setApplicativo(portaApplicativaAutorizzazioneServizioApplicativo.getNome());
  2240.                     applicativiItem.setSoggetto(portaApplicativaAutorizzazioneServizioApplicativo.getNomeSoggettoProprietario());
  2241.                     ret.addApplicativiItem(applicativiItem);
  2242.                 }
  2243.             }
  2244.            
  2245.             context.getLogger().info("Invocazione completata con successo");
  2246.             return ret;
  2247.      
  2248.         }
  2249.         catch(javax.ws.rs.WebApplicationException e) {
  2250.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2251.             throw e;
  2252.         }
  2253.         catch(Throwable e) {
  2254.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2255.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2256.         }
  2257.     }
  2258.    
  2259.     /**
  2260.      * Restituisce l'elenco dei soggetti autorizzati
  2261.      *
  2262.      * Questa operazione consente di ottenere l'elenco dei soggetti autorizzati
  2263.      *
  2264.      */
  2265.     @Override
  2266.     public ControlloAccessiAutorizzazioneSoggetti getErogazioneControlloAccessiAutorizzazioneSoggetti(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2267.         IContext context = this.getContext();
  2268.         try {
  2269.             context.getLogger().info("Invocazione in corso ...");    

  2270.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2271.             context.getLogger().debug("Autorizzazione completata con successo");
  2272.            
  2273.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2274.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2275.            
  2276.             ControlloAccessiAutorizzazioneSoggetti ret = new ControlloAccessiAutorizzazioneSoggetti();
  2277.             List<String> soggetti = BaseHelper.evalnull( () -> pa.getSoggetti().getSoggettoList().stream().map( s -> s.getNome()).collect(Collectors.toList()) );
  2278.                    
  2279.             ret.setSoggetti(soggetti);
  2280.        
  2281.             context.getLogger().info("Invocazione completata con successo");
  2282.             return ret;
  2283.  
  2284.         }
  2285.         catch(javax.ws.rs.WebApplicationException e) {
  2286.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2287.             throw e;
  2288.         }
  2289.         catch(Throwable e) {
  2290.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2291.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2292.         }
  2293.     }
  2294.    
  2295.    /**
  2296.      * Restituisce l'elenco degli applicativi token autorizzati
  2297.      *
  2298.      * Questa operazione consente di ottenere l'elenco degli applicativi token autorizzati
  2299.      *
  2300.      */
  2301.     @Override
  2302.     public ControlloAccessiErogazioneAutorizzazioneApplicativi getErogazioneControlloAccessiAutorizzazioneApplicativiToken(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2303.         IContext context = this.getContext();
  2304.         try {
  2305.             context.getLogger().info("Invocazione in corso ...");    

  2306.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2307.             context.getLogger().debug("Autorizzazione completata con successo");    
  2308.                        
  2309.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2310.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2311.             ControlloAccessiErogazioneAutorizzazioneApplicativi ret = new ControlloAccessiErogazioneAutorizzazioneApplicativi();
  2312.            
  2313.             boolean isProfiloModi = env.isProfiloModi();
  2314.            
  2315.             int idLista = isProfiloModi ? Liste.PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_AUTORIZZATO : Liste.PORTE_APPLICATIVE_TOKEN_SERVIZIO_APPLICATIVO;
  2316.             ConsoleSearch ricerca = Helper.setupRicercaPaginata("", -1, 0, idLista);
  2317.             List<PortaApplicativaAutorizzazioneServizioApplicativo> lista = isProfiloModi ?
  2318.                     env.paCore.porteAppServiziApplicativiAutorizzatiList(pa.getId(), ricerca)
  2319.                     :
  2320.                     env.paCore.porteAppServiziApplicativiAutorizzatiTokenList(pa.getId(), ricerca);
  2321.            
  2322.             if(lista!=null && !lista.isEmpty()) {
  2323.                 for (PortaApplicativaAutorizzazioneServizioApplicativo portaApplicativaAutorizzazioneServizioApplicativo : lista) {
  2324.                     ControlloAccessiErogazioneAutorizzazioneApplicativo applicativiItem = new ControlloAccessiErogazioneAutorizzazioneApplicativo();
  2325.                     applicativiItem.setApplicativo(portaApplicativaAutorizzazioneServizioApplicativo.getNome());
  2326.                     applicativiItem.setSoggetto(portaApplicativaAutorizzazioneServizioApplicativo.getNomeSoggettoProprietario());
  2327.                     ret.addApplicativiItem(applicativiItem);
  2328.                 }
  2329.             }
  2330.            
  2331.             context.getLogger().info("Invocazione completata con successo");
  2332.             return ret;
  2333.         }
  2334.         catch(javax.ws.rs.WebApplicationException e) {
  2335.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2336.             throw e;
  2337.         }
  2338.         catch(Throwable e) {
  2339.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2340.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2341.         }
  2342.     }

  2343.     /**
  2344.      * Restituisce l'elenco dei ruoli autorizzati
  2345.      *
  2346.      * Questa operazione consente di ottenere l'elenco dei ruoli autorizzati
  2347.      *
  2348.      */
  2349.     @Override
  2350.     public ControlloAccessiAutorizzazioneRuoli getErogazioneControlloAccessiAutorizzazioneRuoli(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2351.         IContext context = this.getContext();
  2352.         try {
  2353.             context.getLogger().info("Invocazione in corso ...");    

  2354.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2355.             context.getLogger().debug("Autorizzazione completata con successo");
  2356.            
  2357.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2358.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2359.             final ControlloAccessiAutorizzazioneRuoli ret = new ControlloAccessiAutorizzazioneRuoli();
  2360.                        
  2361.             if(pa.getRuoli()!=null && pa.getRuoli().sizeRuoloList()>0) {
  2362.                 ret.setRuoli(BaseHelper.evalnull( () -> pa.getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList()) ));
  2363.             }
  2364.        
  2365.             context.getLogger().info("Invocazione completata con successo");
  2366.             return ret;
  2367.      
  2368.         }
  2369.         catch(javax.ws.rs.WebApplicationException e) {
  2370.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2371.             throw e;
  2372.         }
  2373.         catch(Throwable e) {
  2374.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2375.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2376.         }
  2377.     }
  2378.    
  2379.    /**
  2380.      * Restituisce l'elenco dei ruoli token autorizzati
  2381.      *
  2382.      * Questa operazione consente di ottenere l'elenco dei ruoli token autorizzati
  2383.      *
  2384.      */
  2385.     @Override
  2386.     public ControlloAccessiAutorizzazioneRuoli getErogazioneControlloAccessiAutorizzazioneRuoliToken(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2387.         IContext context = this.getContext();
  2388.         try {
  2389.             context.getLogger().info("Invocazione in corso ...");    

  2390.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2391.             context.getLogger().debug("Autorizzazione completata con successo");    
  2392.                        
  2393.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2394.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2395.             final ControlloAccessiAutorizzazioneRuoli ret = new ControlloAccessiAutorizzazioneRuoli();
  2396.                        
  2397.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getRuoli()!=null && pa.getAutorizzazioneToken().getRuoli().sizeRuoloList()>0) {
  2398.                 ret.setRuoli(BaseHelper.evalnull( () -> pa.getAutorizzazioneToken().getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList()) ));
  2399.             }
  2400.        
  2401.             context.getLogger().info("Invocazione completata con successo");
  2402.             return ret;
  2403.         }
  2404.         catch(javax.ws.rs.WebApplicationException e) {
  2405.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2406.             throw e;
  2407.         }
  2408.         catch(Throwable e) {
  2409.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2410.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2411.         }
  2412.     }

  2413.     /**
  2414.      * Restituisce l'elenco degli scope autorizzati
  2415.      *
  2416.      * Questa operazione consente di ottenere l'elenco degli scope autorizzati
  2417.      *
  2418.      */
  2419.     @Override
  2420.     public ControlloAccessiAutorizzazioneScopes getErogazioneControlloAccessiAutorizzazioneScope(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2421.         IContext context = this.getContext();
  2422.         try {
  2423.             context.getLogger().info("Invocazione in corso ...");    

  2424.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2425.             context.getLogger().debug("Autorizzazione completata con successo");    

  2426.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2427.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);  
  2428.             final ControlloAccessiAutorizzazioneScopes ret = new ControlloAccessiAutorizzazioneScopes();
  2429.            
  2430.             ret.setScope(BaseHelper.evalnull( () -> pa.getScope().getScopeList().stream().map(Scope::getNome).collect(Collectors.toList()) ));
  2431.            
  2432.             context.getLogger().info("Invocazione completata con successo");
  2433.             return ret;
  2434.      
  2435.         }
  2436.         catch(javax.ws.rs.WebApplicationException e) {
  2437.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2438.             throw e;
  2439.         }
  2440.         catch(Throwable e) {
  2441.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2442.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2443.         }
  2444.     }
  2445.    
  2446.     /**
  2447.      * Restituisce la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  2448.      *
  2449.      * Questa operazione consente di ottenere la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  2450.      *
  2451.      */
  2452.     @Override
  2453.     public ControlloAccessiGestioneToken getErogazioneControlloAccessiGestioneToken(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2454.         IContext context = this.getContext();
  2455.         try {
  2456.             context.getLogger().info("Invocazione in corso ...");    

  2457.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2458.             context.getLogger().debug("Autorizzazione completata con successo");
  2459.        
  2460.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2461.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);  
  2462.            
  2463.             final ControlloAccessiGestioneToken ret = new ControlloAccessiGestioneToken();
  2464.             final GestioneToken paToken = pa.getGestioneToken();
  2465.            
  2466.             ret.setAbilitato(paToken != null);
  2467.             if (paToken != null) {
  2468.                 ret.setIntrospection(StatoFunzionalitaConWarningEnum.fromValue(paToken.getIntrospection().getValue()));
  2469.                 ret.setPolicy(paToken.getPolicy());
  2470.                 ret.setTokenForward( Helper.statoFunzionalitaConfToBool( paToken.getForward() ));
  2471.                 ret.setTokenOpzionale( Helper.statoFunzionalitaConfToBool( paToken.getTokenOpzionale() ));
  2472.                 ret.setUserInfo(StatoFunzionalitaConWarningEnum.fromValue( paToken.getUserInfo().getValue() ));
  2473.                 ret.setValidazioneJwt(StatoFunzionalitaConWarningEnum.fromValue( paToken.getValidazione().getValue() ));
  2474.             }
  2475.        
  2476.             context.getLogger().info("Invocazione completata con successo");
  2477.             return ret;
  2478.      
  2479.         }
  2480.         catch(javax.ws.rs.WebApplicationException e) {
  2481.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2482.             throw e;
  2483.         }
  2484.         catch(Throwable e) {
  2485.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2486.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2487.         }
  2488.     }

  2489.    /**
  2490.      * Restituisce la configurazione relativa all'identificazione degli attributi per quanto concerne il controllo degli accessi
  2491.      *
  2492.      * Questa operazione consente di ottenere la configurazione relativa all'identificazione degli attributi per quanto concerne il controllo degli accessi
  2493.      *
  2494.      */
  2495.     @Override
  2496.     public ControlloAccessiIdentificazioneAttributi getErogazioneControlloAccessiIdentificazioneAttributi(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2497.         IContext context = this.getContext();
  2498.         try {
  2499.             context.getLogger().info("Invocazione in corso ...");    

  2500.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2501.             context.getLogger().debug("Autorizzazione completata con successo");    
  2502.                        
  2503.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2504.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2505.        
  2506.             final ControlloAccessiIdentificazioneAttributi ret = new ControlloAccessiIdentificazioneAttributi();
  2507.             if(pa.sizeAttributeAuthorityList()>0) {
  2508.                 ret.setAbilitato(true);
  2509.                 ret.setAttributeAuthority(new ArrayList<ControlloAccessiAttributeAuthority>());
  2510.                 for (AttributeAuthority aa : pa.getAttributeAuthorityList()) {
  2511.                     ControlloAccessiAttributeAuthority attributeAuthorityItem = new ControlloAccessiAttributeAuthority();
  2512.                     attributeAuthorityItem.setNome(aa.getNome());
  2513.                     if(aa.sizeAttributoList()>0) {
  2514.                         attributeAuthorityItem.setAttributi(new ArrayList<>());
  2515.                         for (String attributeName : aa.getAttributoList()) {
  2516.                             attributeAuthorityItem.addAttributiItem(attributeName);
  2517.                         }
  2518.                     }
  2519.                     ret.addAttributeAuthorityItem(attributeAuthorityItem);
  2520.                 }
  2521.             }
  2522.             else {
  2523.                 ret.setAbilitato(false);
  2524.             }

  2525.             context.getLogger().info("Invocazione completata con successo");
  2526.             return ret;
  2527.         }
  2528.         catch(javax.ws.rs.WebApplicationException e) {
  2529.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2530.             throw e;
  2531.         }
  2532.         catch(Throwable e) {
  2533.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2534.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2535.         }
  2536.     }
  2537.    
  2538.     /**
  2539.      * Restituisce le proprietĆ  di configurazione attivate
  2540.      *
  2541.      * Questa operazione consente di ottenere le proprietĆ  di configurazione
  2542.      *
  2543.      */
  2544.     @Override
  2545.     public ElencoProprieta getErogazioneElencoProprieta(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2546.         IContext context = this.getContext();
  2547.         try {
  2548.             context.getLogger().info("Invocazione in corso ...");    

  2549.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2550.             context.getLogger().debug("Autorizzazione completata con successo");    
  2551.                        
  2552.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2553.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  2554.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2555.            
  2556.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  2557.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  2558.      
  2559.             ElencoProprieta ret = new ElencoProprieta();
  2560.             ret.setProprieta(new ArrayList<>());
  2561.             if(pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  2562.                 for (Proprieta p: pa.getProprietaList()) {
  2563.                     org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura retP = new org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura();
  2564.                     retP.setNome(p.getNome());
  2565.                     retP.setValore(p.getValore());
  2566.                     retP.setEncrypted(BYOKUtilities.isWrappedValue(p.getValore()));
  2567.                     ret.addProprietaItem(retP);
  2568.                 }
  2569.             }
  2570.            
  2571.             context.getLogger().info("Invocazione completata con successo");
  2572.             return ret;        
  2573.         }
  2574.         catch(javax.ws.rs.WebApplicationException e) {
  2575.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2576.             throw e;
  2577.         }
  2578.         catch(Throwable e) {
  2579.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2580.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2581.         }
  2582.     }

  2583.     /**
  2584.      * Restituisce il dettaglio di una proprietĆ  di configurazione
  2585.      *
  2586.      * Questa operazione consente di ottenere il dettaglio di una proprietĆ  di configurazione
  2587.      *
  2588.      */
  2589.     @Override
  2590.     public org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura getErogazioneProprieta(String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2591.         IContext context = this.getContext();
  2592.         try {
  2593.             context.getLogger().info("Invocazione in corso ...");    

  2594.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2595.             context.getLogger().debug("Autorizzazione completata con successo");    
  2596.                        
  2597.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2598.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  2599.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2600.            
  2601.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  2602.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  2603.            
  2604.             Proprieta toGet = null;
  2605.             if(pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  2606.                 Optional<Proprieta> op = BaseHelper.findFirst(pa.getProprietaList(), p -> p.getNome().equals(proprieta));
  2607.                 if(op.isPresent()) {
  2608.                     toGet = op.get();
  2609.                 }
  2610.             }
  2611.            
  2612.             org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura ret = null;
  2613.             if(toGet!=null) {
  2614.                 ret = new org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura();
  2615.                 ret.setNome(toGet.getNome());
  2616.                 ret.setValore(toGet.getValore());
  2617.                 ret.setEncrypted(BYOKUtilities.isWrappedValue(toGet.getValore()));
  2618.             }
  2619.             else {
  2620.                 throw FaultCode.NOT_FOUND.toException("Nessuna proprietĆ  ĆØ presente nella configurazione con nome '"+proprieta+"'");
  2621.             }
  2622.            
  2623.             context.getLogger().info("Invocazione completata con successo");
  2624.             return ret;
  2625.      
  2626.         }
  2627.         catch(javax.ws.rs.WebApplicationException e) {
  2628.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2629.             throw e;
  2630.         }
  2631.         catch(Throwable e) {
  2632.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2633.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2634.         }
  2635.     }

  2636.     /**
  2637.      * Restituisce le informazioni sulla configurazione CORS associata all'erogazione
  2638.      *
  2639.      * Questa operazione consente di ottenere le informazioni sulla configurazione CORS associata all'erogazione identificata dal nome e dalla versione
  2640.      *
  2641.      */
  2642.     @Override
  2643.     public GestioneCors getErogazioneGestioneCORS(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  2644.         IContext context = this.getContext();
  2645.         try {
  2646.             context.getLogger().info("Invocazione in corso ...");    

  2647.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2648.             context.getLogger().debug("Autorizzazione completata con successo");    
  2649.                        
  2650.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2651.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  2652.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2653.            
  2654.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  2655.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  2656.             final CorsConfigurazione paConf = pa.getGestioneCors();
  2657.            
  2658.             final GestioneCors ret = ErogazioniApiHelper.convert(paConf);
  2659.            
  2660.             context.getLogger().info("Invocazione completata con successo");
  2661.             return ret;

  2662.         }
  2663.         catch(javax.ws.rs.WebApplicationException e) {
  2664.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2665.             throw e;
  2666.         }
  2667.         catch(Throwable e) {
  2668.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2669.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2670.         }
  2671.     }
  2672.    
  2673.     /**
  2674.      * Restituisce il dettaglio di una policy di rate limiting
  2675.      *
  2676.      * Questa operazione consente di ottenere il dettaglio di una policy di rate limiting
  2677.      *
  2678.      */
  2679.     @Override
  2680.     public RateLimitingPolicyErogazioneView getErogazioneRateLimitingPolicy(String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2681.         IContext context = this.getContext();
  2682.         try {
  2683.             context.getLogger().info("Invocazione in corso ...");    

  2684.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2685.             context.getLogger().debug("Autorizzazione completata con successo");
  2686.            
  2687.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2688.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2689.            
  2690.             AttivazionePolicy policy = BaseHelper.supplyOrNotFound(
  2691.                     () -> env.confCore.getAttivazionePolicy(idPolicy, RuoloPolicy.APPLICATIVA, pa.getNome()),
  2692.                     "Rate Limiting Policy con nome " + idPolicy
  2693.                 );
  2694.             if ( policy == null )
  2695.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con nome " + idPolicy );
  2696.            
  2697.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  2698.                        
  2699.             RateLimitingPolicyErogazioneView ret = ErogazioniApiHelper.convert(policy, infoPolicy, new RateLimitingPolicyErogazioneView());
  2700.            
  2701.             context.getLogger().info("Invocazione completata con successo");
  2702.             return ret;
  2703.      
  2704.         }
  2705.         catch(javax.ws.rs.WebApplicationException e) {
  2706.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2707.             throw e;
  2708.         }
  2709.         catch(Throwable e) {
  2710.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2711.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2712.         }
  2713.     }
  2714.    
  2715.     /**
  2716.      * Restituisce la configurazione relativa alla registrazione dei diagnostici
  2717.      *
  2718.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione dei diagnostici
  2719.      *
  2720.      */
  2721.     @Override
  2722.     public RegistrazioneDiagnosticiConfigurazione getErogazioneRegistrazioneDiagnostici(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2723.         IContext context = this.getContext();
  2724.         try {
  2725.             context.getLogger().info("Invocazione in corso ...");    

  2726.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2727.             context.getLogger().debug("Autorizzazione completata con successo");    
  2728.                        

  2729.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2730.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);  
  2731.             final RegistrazioneDiagnosticiConfigurazione ret = ErogazioniApiHelper.fromDiagnosticiConfigurazione(pa.getTracciamento());
  2732.            
  2733.             context.getLogger().info("Invocazione completata con successo");
  2734.             return ret;
  2735.      
  2736.         }
  2737.         catch(javax.ws.rs.WebApplicationException e) {
  2738.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2739.             throw e;
  2740.         }
  2741.         catch(Throwable e) {
  2742.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2743.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2744.         }
  2745.     }

  2746.     /**
  2747.      * Restituisce la configurazione relativa alla registrazione dei messaggi
  2748.      *
  2749.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione dei messaggi
  2750.      *
  2751.      */
  2752.     @Override
  2753.     public RegistrazioneMessaggi getErogazioneRegistrazioneMessaggi(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2754.         IContext context = this.getContext();
  2755.         try {
  2756.             context.getLogger().info("Invocazione in corso ...");    

  2757.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2758.             context.getLogger().debug("Autorizzazione completata con successo");
  2759.            
  2760.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2761.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);  
  2762.             final RegistrazioneMessaggi ret = ErogazioniApiHelper.fromDumpConfigurazione(pa.getDump());
  2763.            
  2764.             context.getLogger().info("Invocazione completata con successo");
  2765.             return ret;
  2766.      
  2767.         }
  2768.         catch(javax.ws.rs.WebApplicationException e) {
  2769.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2770.             throw e;
  2771.         }
  2772.         catch(Throwable e) {
  2773.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2774.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2775.         }
  2776.     }

  2777.    
  2778.     /**
  2779.      * Restituisce la configurazione relativa alla registrazione delle transazioni
  2780.      *
  2781.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione delle transazioni
  2782.      *
  2783.      */
  2784.     @Override
  2785.     public RegistrazioneTransazioniConfigurazione getErogazioneRegistrazioneTransazioni(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2786.         IContext context = this.getContext();
  2787.         try {
  2788.             context.getLogger().info("Invocazione in corso ...");    

  2789.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2790.             context.getLogger().debug("Autorizzazione completata con successo");    
  2791.                        
  2792.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2793.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);  
  2794.             final RegistrazioneTransazioniConfigurazione ret = ErogazioniApiHelper.fromTransazioniConfigurazione(pa.getTracciamento(), env);
  2795.        
  2796.             context.getLogger().info("Invocazione completata con successo");
  2797.             return ret;
  2798.      
  2799.         }
  2800.         catch(javax.ws.rs.WebApplicationException e) {
  2801.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2802.             throw e;
  2803.         }
  2804.         catch(Throwable e) {
  2805.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2806.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2807.         }
  2808.     }

  2809.     /**
  2810.      * Restituisce l'indicazione sullo stato del gruppo
  2811.      *
  2812.      * Questa operazione consente di ottenere lo stato attuale del gruppo
  2813.      *
  2814.      */
  2815.     @Override
  2816.     public ApiImplStato getErogazioneStato(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2817.         IContext context = this.getContext();
  2818.         try {
  2819.             context.getLogger().info("Invocazione in corso ...");    

  2820.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2821.             context.getLogger().debug("Autorizzazione completata con successo");
  2822.        
  2823.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2824.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2825.            
  2826.             final ApiImplStato ret = new ApiImplStato();
  2827.             ret.setAbilitato(Helper.statoFunzionalitaConfToBool(pa.getStato()));
  2828.                        
  2829.        
  2830.             context.getLogger().info("Invocazione completata con successo");
  2831.             return ret;
  2832.      
  2833.         }
  2834.         catch(javax.ws.rs.WebApplicationException e) {
  2835.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2836.             throw e;
  2837.         }
  2838.         catch(Throwable e) {
  2839.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2840.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2841.         }
  2842.     }
  2843.    
  2844.     /**
  2845.      * Restituisce il dettaglio di una regola di correlazione applicativa per la richiesta
  2846.      *
  2847.      * Questa operazione consente di ottenere il dettaglio di una regola di correlazione applicativa per la richiesta
  2848.      *
  2849.      */
  2850.     @Override
  2851.     public CorrelazioneApplicativaRichiesta getErogazioneTracciamentoCorrelazioneApplicativaRichiesta(String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2852.         IContext context = this.getContext();
  2853.         try {
  2854.             context.getLogger().info("Invocazione in corso ...");    

  2855.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2856.             context.getLogger().debug("Autorizzazione completata con successo");    
  2857.            
  2858.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2859.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2860.            
  2861.             final String searchElemento = elemento.equals("*")
  2862.                     ? ""
  2863.                     : elemento;        
  2864.             List<CorrelazioneApplicativaElemento> lista = BaseHelper.evalnull( () -> pa.getCorrelazioneApplicativa().getElementoList() );
  2865.            
  2866.             Optional<CorrelazioneApplicativaElemento> el = BaseHelper.findFirst( lista, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento) );
  2867.            
  2868.             if ( !el.isPresent() )
  2869.                 throw FaultCode.NOT_FOUND.toException("CorrelazioneApplicativaRichiesta per l'elemento " + elemento + " non presente");
  2870.            
  2871.             CorrelazioneApplicativaRichiesta ret = ErogazioniApiHelper.convert(el.get());
  2872.            
  2873.             context.getLogger().info("Invocazione completata con successo");
  2874.             return ret;
  2875.      
  2876.         }
  2877.         catch(javax.ws.rs.WebApplicationException e) {
  2878.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2879.             throw e;
  2880.         }
  2881.         catch(Throwable e) {
  2882.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2883.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2884.         }
  2885.     }
  2886.    
  2887.     /**
  2888.      * Restituisce il dettaglio di una regola di correlazione applicativa per la risposta
  2889.      *
  2890.      * Questa operazione consente di ottenere il dettaglio di una regola di correlazione applicativa per la risposta
  2891.      *
  2892.      */
  2893.     @Override
  2894.     public CorrelazioneApplicativaRisposta getErogazioneTracciamentoCorrelazioneApplicativaRisposta(String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2895.         IContext context = this.getContext();
  2896.         try {
  2897.             context.getLogger().info("Invocazione in corso ...");    

  2898.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2899.             context.getLogger().debug("Autorizzazione completata con successo");    
  2900.            
  2901.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2902.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2903.            
  2904.             final String searchElemento = elemento.equals("*")
  2905.                     ? ""
  2906.                     : elemento;        
  2907.            
  2908.             List<CorrelazioneApplicativaRispostaElemento> lista = BaseHelper.evalnull( () -> pa.getCorrelazioneApplicativaRisposta().getElementoList() );
  2909.            
  2910.             Optional<CorrelazioneApplicativaRispostaElemento> el = BaseHelper.findFirst( lista, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento) );
  2911.            
  2912.             if ( !el.isPresent() )
  2913.                 throw FaultCode.NOT_FOUND.toException("CorrelazioneApplicativaRisposta per l'elemento " + elemento + " non presente");
  2914.            
  2915.             CorrelazioneApplicativaRisposta ret = ErogazioniApiHelper.convert(el.get());
  2916.            
  2917.             context.getLogger().info("Invocazione completata con successo");
  2918.             return ret;
  2919.      
  2920.         }
  2921.         catch(javax.ws.rs.WebApplicationException e) {
  2922.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2923.             throw e;
  2924.         }
  2925.         catch(Throwable e) {
  2926.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2927.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2928.         }
  2929.     }
  2930.    
  2931.     /**
  2932.      * Restituisce la configurazione relativa alla validazione dei contenuti applicativi
  2933.      *
  2934.      * Questa operazione consente di ottenere la configurazione relativa alla validazione dei contenuti applicativi
  2935.      *
  2936.      */
  2937.     @Override
  2938.     public Validazione getErogazioneValidazione(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2939.         IContext context = this.getContext();
  2940.         try {
  2941.             context.getLogger().info("Invocazione in corso ...");    

  2942.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2943.             context.getLogger().debug("Autorizzazione completata con successo");    
  2944.            
  2945.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2946.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2947.             final Validazione ret = ErogazioniApiHelper.fromValidazioneContenutiApplicativi(pa.getValidazioneContenutiApplicativi());
  2948.        
  2949.             context.getLogger().info("Invocazione completata con successo");
  2950.             return ret;
  2951.      
  2952.         }
  2953.         catch(javax.ws.rs.WebApplicationException e) {
  2954.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2955.             throw e;
  2956.         }
  2957.         catch(Throwable e) {
  2958.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2959.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2960.         }
  2961.     }
  2962.    
  2963.     /**
  2964.      * Consente di modificare la configurazione relativa al caching delle risposte
  2965.      *
  2966.      * Questa operazione consente di aggiornare la configurazione relativa al caching delle risposte
  2967.      *
  2968.      */
  2969.     @Override
  2970.     public void updateErogazioneCachingRisposta(CachingRisposta body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2971.         IContext context = this.getContext();
  2972.         try {
  2973.             context.getLogger().info("Invocazione in corso ...");    

  2974.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2975.             context.getLogger().debug("Autorizzazione completata con successo");
  2976.            
  2977.             BaseHelper.throwIfNull(body);
  2978.            
  2979.             // CosƬ prendi le impostazioni di default.
  2980.             //  Configurazione configurazione = confCore.getConfigurazioneGenerale();
  2981.             //  ResponseCachingConfigurazioneGenerale responseCachingGenerale = configurazione.getResponseCaching();
  2982.             //  responseCachingGenerale.getConfigurazione();        
  2983.            
  2984.             if (body.isMaxResponseSize()) {
  2985.                 if (body.getMaxResponseSizeKb() == null)
  2986.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Devi specificare il campo MaxResponseSizeKb");
  2987.             }
  2988.            
  2989.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  2990.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  2991.        
  2992.             if (!env.paHelper.checkDataConfigurazioneResponseCachingPorta(TipoOperazione.OTHER, true, body.getStato().toString())) {
  2993.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  2994.             }
  2995.            
  2996.             ResponseCachingConfigurazione newConfigurazione = ErogazioniApiHelper.buildResponseCachingConfigurazione(body, env.paHelper);
  2997.            
  2998.             pa.setResponseCaching(newConfigurazione);
  2999.             env.paCore.performUpdateOperation(env.userLogin, false, pa);            
  3000.            
  3001.             context.getLogger().info("Invocazione completata con successo");
  3002.      
  3003.         }
  3004.         catch(javax.ws.rs.WebApplicationException e) {
  3005.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3006.             throw e;
  3007.         }
  3008.         catch(Throwable e) {
  3009.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3010.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3011.         }
  3012.     }

  3013.     /**
  3014.      * Consente di modificare il canale associato all'erogazione
  3015.      *
  3016.      * Questa operazione consente di aggiornare il canale associato all'erogazione
  3017.      *
  3018.      */
  3019.     @Override
  3020.     public void updateErogazioneCanale(ConfigurazioneApiCanale body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  3021.         IContext context = this.getContext();
  3022.         try {
  3023.             context.getLogger().info("Invocazione in corso ...");    

  3024.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3025.             context.getLogger().debug("Autorizzazione completata con successo");    
  3026.                        
  3027.             BaseHelper.throwIfNull(body);

  3028.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  3029.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  3030.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  3031.            
  3032.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  3033.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  3034.                        
  3035.             if(ConfigurazioneCanaleEnum.RIDEFINITO.equals(body.getConfigurazione())){
  3036.                 if(body.getCanale()==null || "".equals(body.getCanale())) {
  3037.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un canale");
  3038.                 }
  3039.                 if(!env.canali.contains(body.getCanale())) {
  3040.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + body.getCanale() + "' non ĆØ presente nel registro");
  3041.                 }
  3042.                 pa.setCanale(body.getCanale());
  3043.             }
  3044.             else {
  3045.                 pa.setCanale(null);
  3046.             }
  3047.            
  3048.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3049.            
  3050.             context.getLogger().info("Invocazione completata con successo");
  3051.      
  3052.         }
  3053.         catch(javax.ws.rs.WebApplicationException e) {
  3054.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3055.             throw e;
  3056.         }
  3057.         catch(Throwable e) {
  3058.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3059.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3060.         }
  3061.     }

  3062.     /**
  3063.      * Consente di modificare la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  3064.      *
  3065.      * Questa operazione consente di aggiornare la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  3066.      *
  3067.      */
  3068.     @Override
  3069.     public void updateErogazioneControlloAccessiAutenticazione(ControlloAccessiAutenticazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3070.         IContext context = this.getContext();
  3071.         try {
  3072.             context.getLogger().info("Invocazione in corso ...");    

  3073.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3074.             context.getLogger().debug("Autorizzazione completata con successo");
  3075.            
  3076.             BaseHelper.throwIfNull(body);
  3077.            
  3078.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3079.             final PortaApplicativa newPa = env.paCore.getPortaApplicativa(env.idPa);
  3080.             final PortaApplicativa oldPa = env.paCore.getPortaApplicativa(env.idPa);            

  3081.             ErogazioniApiHelper.fillPortaApplicativa(env, body, newPa);
  3082.            
  3083.             if (! ErogazioniApiHelper.controlloAccessiCheckPA(env, oldPa, newPa)) {
  3084.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  3085.             }
  3086.        
  3087.             env.paCore.performUpdateOperation(env.userLogin, false, newPa);
  3088.        
  3089.             context.getLogger().info("Invocazione completata con successo");
  3090.      
  3091.         }
  3092.         catch(javax.ws.rs.WebApplicationException e) {
  3093.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3094.             throw e;
  3095.         }
  3096.         catch(Throwable e) {
  3097.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3098.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3099.         }
  3100.     }

  3101.     /**
  3102.      * Consente di modificare la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  3103.      *
  3104.      * Questa operazione consente di aggiornare la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  3105.      *
  3106.      */
  3107.     @Override
  3108.     public void updateErogazioneControlloAccessiAutorizzazione(ControlloAccessiAutorizzazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3109.         IContext context = this.getContext();
  3110.         try {
  3111.             context.getLogger().info("Invocazione in corso ...");    

  3112.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3113.             context.getLogger().debug("Autorizzazione completata con successo");
  3114.            
  3115.             BaseHelper.throwIfNull(body);
  3116.            
  3117.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3118.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);                  
  3119.             final PortaApplicativa newPa = env.paCore.getPortaApplicativa(env.idPa);        
  3120.            
  3121.             ErogazioniApiHelper.fillPortaApplicativa(body, newPa);
  3122.            
  3123.             if (!ErogazioniApiHelper.controlloAccessiCheckPA(env, pa, newPa)) {
  3124.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  3125.             }
  3126.            
  3127.             env.paCore.performUpdateOperation(env.userLogin, false, newPa);
  3128.                        
  3129.             context.getLogger().info("Invocazione completata con successo");
  3130.      
  3131.         }
  3132.         catch(javax.ws.rs.WebApplicationException e) {
  3133.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3134.             throw e;
  3135.         }
  3136.         catch(Throwable e) {
  3137.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3138.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3139.         }
  3140.     }

  3141.     /**
  3142.      * Consente di modificare la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  3143.      *
  3144.      * Questa operazione consente di aggiornare la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  3145.      *
  3146.      */
  3147.     @Override
  3148.     public void updateErogazioneControlloAccessiGestioneToken(ControlloAccessiGestioneToken body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3149.         IContext context = this.getContext();
  3150.         try {
  3151.             context.getLogger().info("Invocazione in corso ...");
  3152.            
  3153.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3154.             context.getLogger().debug("Autorizzazione completata con successo");    
  3155.            
  3156.             BaseHelper.throwIfNull(body);
  3157.            
  3158.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3159.             final PortaApplicativa oldPa = env.paCore.getPortaApplicativa(env.idPa);
  3160.             final PortaApplicativa newPa = env.paCore.getPortaApplicativa(env.idPa);
  3161.            
  3162.             if (body.isAbilitato()) {
  3163.                 GestioneToken gTok = newPa.getGestioneToken() != null ? newPa.getGestioneToken() : new GestioneToken();
  3164.                 ErogazioniApiHelper.fillGestioneToken(gTok, body);
  3165.                 newPa.setGestioneToken(gTok);
  3166.             }
  3167.             else
  3168.                 newPa.setGestioneToken(null);
  3169.            
  3170.             if ( !ErogazioniApiHelper.controlloAccessiCheckPA(env, oldPa, newPa) ) {
  3171.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(env.pd.getMessage());
  3172.             }
  3173.            
  3174.             env.paCore.performUpdateOperation(env.userLogin, false, newPa);
  3175.            
  3176.             context.getLogger().info("Invocazione completata con successo");
  3177.  
  3178.         }
  3179.         catch(javax.ws.rs.WebApplicationException e) {
  3180.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3181.             throw e;
  3182.         }
  3183.         catch(Throwable e) {
  3184.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3185.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3186.         }
  3187.     }
  3188.    
  3189.     /**
  3190.      * Modifica i dati di una proprietĆ  di configurazione
  3191.      *
  3192.      * Questa operazione consente di aggiornare i dati relativi ad una proprietĆ  di configurazione
  3193.      *
  3194.      */
  3195.     @Override
  3196.     public void updateErogazioneProprieta(org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura body, String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {

  3197.         IContext context = this.getContext();
  3198.         try {
  3199.             context.getLogger().info("Invocazione in corso ...");    

  3200.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3201.             context.getLogger().debug("Autorizzazione completata con successo");    
  3202.                        
  3203.             BaseHelper.throwIfNull(body);
  3204.            
  3205.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3206.             if(env.paCore==null) {
  3207.                 throw new CoreException("PaCore not initialized");
  3208.             }
  3209.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3210.            
  3211.             if ((body.getNome().indexOf(" ") != -1) || (body.getValore().indexOf(" ") != -1)) {
  3212.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  3213.             }
  3214.            
  3215.             if(!proprieta.equals(body.getNome()) &&
  3216.                 // cambio nome proprieta
  3217.                 pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  3218.                 for (Proprieta p : pa.getProprietaList()) {
  3219.                     if(p.getNome().equals(body.getNome())) {
  3220.                         throw FaultCode.CONFLITTO.toException("ProprietĆ  " + body.getNome() + " giĆ  assegnata alla configurazione");
  3221.                     }
  3222.                 }
  3223.             }
  3224.            
  3225.             boolean found = false;
  3226.             if(pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  3227.                 for (Proprieta p : pa.getProprietaList()) {
  3228.                     if(p.getNome().equals(proprieta)) {
  3229.                         p.setNome(body.getNome());
  3230.                         if(env.paCore!=null && env.paCore.getDriverBYOKUtilities()!=null &&
  3231.                                 body.isEncrypted()!=null && body.isEncrypted().booleanValue()) {
  3232.                             p.setValore(env.paCore.getDriverBYOKUtilities().wrap(body.getValore()));
  3233.                         }
  3234.                         else {
  3235.                             if(body.getValore().length()>255) {
  3236.                                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_255);
  3237.                             }
  3238.                             p.setValore(body.getValore());
  3239.                         }
  3240.                         found = true;
  3241.                         break;
  3242.                     }
  3243.                 }
  3244.             }
  3245.            
  3246.             if(!found) {
  3247.                 throw FaultCode.NOT_FOUND.toException("ProprietĆ  " + body.getNome() + " non presente nella configurazione");
  3248.             }
  3249.            
  3250.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3251.            
  3252.             context.getLogger().info("Invocazione completata con successo");
  3253.      
  3254.         }
  3255.         catch(javax.ws.rs.WebApplicationException e) {
  3256.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3257.             throw e;
  3258.         }
  3259.         catch(Throwable e) {
  3260.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3261.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3262.         }
  3263.     }

  3264.     /**
  3265.      * Consente di modificare la configurazione relativa all'identificazione degli attributi per quanto concerne il controllo degli accessi
  3266.      *
  3267.      * Questa operazione consente di aggiornare la configurazione relativa all'identificazione degli attributi per quanto concerne il controllo degli accessi
  3268.      *
  3269.      */
  3270.     @Override
  3271.     public void updateErogazioneControlloIdentificazioneAttributi(ControlloAccessiIdentificazioneAttributi body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3272.         IContext context = this.getContext();
  3273.         try {
  3274.             context.getLogger().info("Invocazione in corso ...");    

  3275.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3276.             context.getLogger().debug("Autorizzazione completata con successo");    
  3277.                        
  3278.             BaseHelper.throwIfNull(body);
  3279.            
  3280.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3281.             final PortaApplicativa oldPa = env.paCore.getPortaApplicativa(env.idPa);
  3282.             final PortaApplicativa newPa = env.paCore.getPortaApplicativa(env.idPa);
  3283.        
  3284.             if (body.isAbilitato() && body.getAttributeAuthority()!=null && !body.getAttributeAuthority().isEmpty()) {
  3285.                 if(newPa.getAttributeAuthorityList()==null) {
  3286.                     newPa.setAttributeAuthorityList(new ArrayList<AttributeAuthority>());
  3287.                 }
  3288.                 else {
  3289.                     newPa.getAttributeAuthorityList().clear();
  3290.                 }
  3291.                 for (ControlloAccessiAttributeAuthority controlloAccessiAttributeAuthority : body.getAttributeAuthority()) {
  3292.                    
  3293.                     GenericProperties gp = null;
  3294.                     try {
  3295.                         gp = env.confCore.getGenericProperties(controlloAccessiAttributeAuthority.getNome(), org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, false);
  3296.                     }catch(DriverConfigurazioneNotFound notFound) {}
  3297.                     if(gp==null) {
  3298.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("AttributeAuthority '"+controlloAccessiAttributeAuthority.getNome()+"' non esistente");
  3299.                     }
  3300.                    
  3301.                     AttributeAuthority aa = new AttributeAuthority();
  3302.                     aa.setNome(controlloAccessiAttributeAuthority.getNome());
  3303.                     if(controlloAccessiAttributeAuthority.getAttributi()!=null && !controlloAccessiAttributeAuthority.getAttributi().isEmpty()) {
  3304.                         aa.setAttributoList(controlloAccessiAttributeAuthority.getAttributi());
  3305.                     }
  3306.                     newPa.addAttributeAuthority(aa);
  3307.                 }
  3308.             }
  3309.             else {
  3310.                 if(newPa.getAttributeAuthorityList()!=null) {
  3311.                     newPa.getAttributeAuthorityList().clear();
  3312.                 }
  3313.                 else {
  3314.                     newPa.setAttributeAuthorityList(new ArrayList<AttributeAuthority>());
  3315.                 }
  3316.             }
  3317.            
  3318.             if ( !ErogazioniApiHelper.controlloAccessiCheckPA(env, oldPa, newPa) ) {
  3319.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(env.pd.getMessage());
  3320.             }
  3321.            
  3322.             env.paCore.performUpdateOperation(env.userLogin, false, newPa);
  3323.            
  3324.             context.getLogger().info("Invocazione completata con successo");
  3325.         }
  3326.         catch(javax.ws.rs.WebApplicationException e) {
  3327.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3328.             throw e;
  3329.         }
  3330.         catch(Throwable e) {
  3331.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3332.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3333.         }
  3334.     }

  3335.     /**
  3336.      * Consente di modificare la configurazione CORS associata all'erogazione
  3337.      *
  3338.      * Questa operazione consente di aggiornare la configurazione CORS associata all'erogazione identificata dal nome e dalla versione
  3339.      *
  3340.      */
  3341.     @Override
  3342.     public void updateErogazioneGestioneCORS(GestioneCors body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  3343.         IContext context = this.getContext();
  3344.         try {
  3345.             context.getLogger().info("Invocazione in corso ...");    

  3346.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3347.             context.getLogger().debug("Autorizzazione completata con successo");
  3348.            
  3349.             BaseHelper.throwIfNull(body);

  3350.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  3351.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio , nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  3352.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  3353.            
  3354.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPADefault( idAsps, env.apsCore ),  "Gruppo default per l'erogazione scelta" );
  3355.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  3356.             final CorsConfigurazione oldConf = pa.getGestioneCors();
  3357.            
  3358.            
  3359.             if (body.isRidefinito())
  3360.                 pa.setGestioneCors(ErogazioniApiHelper.buildCorsConfigurazione(body, env, oldConf));
  3361.             else
  3362.                 pa.setGestioneCors(null);
  3363.            
  3364.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3365.            
  3366.             context.getLogger().info("Invocazione completata con successo");
  3367.        
  3368.      
  3369.         }
  3370.         catch(javax.ws.rs.WebApplicationException e) {
  3371.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3372.             throw e;
  3373.         }
  3374.         catch(Throwable e) {
  3375.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3376.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3377.         }
  3378.     }
  3379.    
  3380.     /**
  3381.      * Modifica i dati di una policy di rate limiting
  3382.      *
  3383.      * Questa operazione consente di aggiornare i dati relativi ad una policy di rate limiting
  3384.      *
  3385.      */
  3386.     @Override
  3387.     public void updateErogazioneRateLimitingPolicy(RateLimitingPolicyErogazioneUpdate body, String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3388.         IContext context = this.getContext();
  3389.         try {
  3390.             context.getLogger().info("Invocazione in corso ...");    

  3391.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3392.             context.getLogger().debug("Autorizzazione completata con successo");
  3393.            
  3394.             BaseHelper.throwIfNull(body);            
  3395.            
  3396.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3397.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);      
  3398.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  3399.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  3400.                     "Accordo Servizio Parte Specifica");
  3401.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3402.            
  3403.             AttivazionePolicy policy = BaseHelper.supplyOrNotFound(
  3404.                     () -> env.confCore.getAttivazionePolicy(idPolicy, RuoloPolicy.APPLICATIVA, pa.getNome()),
  3405.                     "Rate Limiting Policy con nome " + idPolicy
  3406.                 );
  3407.             if ( policy == null )
  3408.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con nome " + idPolicy );
  3409.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  3410.        
  3411.             ErogazioniApiHelper.override(infoPolicy.getTipoRisorsa(), body, env.protocolFactory.getProtocol(), env.idSoggetto.toIDSoggetto(), env.requestWrapper);  
  3412.             String errorAttivazione = env.confHelper.readDatiAttivazionePolicyFromHttpParameters(policy, false, TipoOperazione.CHANGE, infoPolicy);
  3413.             if ( !StringUtils.isEmpty(errorAttivazione) ) {
  3414.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(errorAttivazione));
  3415.             }
  3416.            
  3417.             String modalita = ErogazioniApiHelper.getDataElementModalita(infoPolicy.isBuiltIn());
  3418.             ErogazioniApiHelper.attivazionePolicyCheckData(TipoOperazione.CHANGE, pa, policy, infoPolicy, env, env.apcCore.toMessageServiceBinding(apc.getServiceBinding()), modalita);
  3419.            
  3420.             env.confCore.performUpdateOperation(env.userLogin, false, policy);

  3421.             context.getLogger().info("Invocazione completata con successo");
  3422.         }
  3423.         catch(javax.ws.rs.WebApplicationException e) {
  3424.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3425.             throw e;
  3426.         }
  3427.         catch(Throwable e) {
  3428.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3429.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3430.         }
  3431.     }
  3432.    
  3433.     /**
  3434.      * Consente di modificare la configurazione relativa alla registrazione dei diagnostici
  3435.      *
  3436.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione dei diagnostici
  3437.      *
  3438.      */
  3439.     @Override
  3440.     public void updateErogazioneRegistrazioneDiagnostici(RegistrazioneDiagnosticiConfigurazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3441.         IContext context = this.getContext();
  3442.         try {
  3443.             context.getLogger().info("Invocazione in corso ...");    

  3444.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3445.             context.getLogger().debug("Autorizzazione completata con successo");    
  3446.                        
  3447.             BaseHelper.throwIfNull(body);
  3448.            
  3449.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3450.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3451.            
  3452.             ErogazioniApiHelper.updateTracciamento(body, pa, env);
  3453.            
  3454.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3455.        
  3456.             context.getLogger().info("Invocazione completata con successo");
  3457.      
  3458.         }
  3459.         catch(javax.ws.rs.WebApplicationException e) {
  3460.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3461.             throw e;
  3462.         }
  3463.         catch(Throwable e) {
  3464.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3465.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3466.         }
  3467.     }

  3468.     /**
  3469.      * Consente di modificare la configurazione relativa alla registrazione dei messaggi
  3470.      *
  3471.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione dei messaggi
  3472.      *
  3473.      */
  3474.     @Override
  3475.     public void updateErogazioneRegistrazioneMessaggi(RegistrazioneMessaggi body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3476.         IContext context = this.getContext();
  3477.         try {
  3478.             context.getLogger().info("Invocazione in corso ...");    

  3479.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3480.             context.getLogger().debug("Autorizzazione completata con successo");
  3481.            
  3482.             BaseHelper.throwIfNull(body);
  3483.            
  3484.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3485.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3486.            
  3487.             if (body.isRidefinito())
  3488.                 pa.setDump(ErogazioniApiHelper.buildDumpConfigurazione(body, true, env));
  3489.             else
  3490.                 pa.setDump(null);
  3491.            
  3492.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  3493.             context.getLogger().info("Invocazione completata con successo");
  3494.        
  3495.      
  3496.         }
  3497.         catch(javax.ws.rs.WebApplicationException e) {
  3498.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3499.             throw e;
  3500.         }
  3501.         catch(Throwable e) {
  3502.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3503.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3504.         }
  3505.     }
  3506.    
  3507.     /**
  3508.      * Consente di modificare la configurazione relativa alla registrazione delle transazioni
  3509.      *
  3510.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione delle transazioni
  3511.      *
  3512.      */
  3513.     @Override
  3514.     public void updateErogazioneRegistrazioneTransazioni(RegistrazioneTransazioniConfigurazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3515.         IContext context = this.getContext();
  3516.         try {
  3517.             context.getLogger().info("Invocazione in corso ...");    

  3518.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3519.             context.getLogger().debug("Autorizzazione completata con successo");    
  3520.                        
  3521.             BaseHelper.throwIfNull(body);
  3522.            
  3523.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3524.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3525.            
  3526.             ErogazioniApiHelper.updateTracciamento(body, pa, env);
  3527.            
  3528.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3529.        
  3530.             context.getLogger().info("Invocazione completata con successo");
  3531.        
  3532.         }
  3533.         catch(javax.ws.rs.WebApplicationException e) {
  3534.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3535.             throw e;
  3536.         }
  3537.         catch(Throwable e) {
  3538.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3539.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3540.         }
  3541.     }

  3542.     /**
  3543.      * Consente di modificare lo stato del gruppo
  3544.      *
  3545.      * Questa operazione consente di aggiornare lo stato del gruppo
  3546.      *
  3547.      */
  3548.     @Override
  3549.     public void updateErogazioneStato(ApiImplStato body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3550.         IContext context = this.getContext();
  3551.         try {
  3552.             context.getLogger().info("Invocazione in corso ...");    

  3553.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3554.             context.getLogger().debug("Autorizzazione completata con successo");            
  3555.            
  3556.             BaseHelper.throwIfNull(body);  
  3557.            
  3558.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3559.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3560.            
  3561.             IDPortaApplicativa oldIDPortaApplicativaForUpdate = new IDPortaApplicativa();
  3562.             oldIDPortaApplicativaForUpdate.setNome(pa.getNome());
  3563.             pa.setOldIDPortaApplicativaForUpdate(oldIDPortaApplicativaForUpdate);
  3564.            
  3565.             pa.setStato(Helper.boolToStatoFunzionalitaConf(body.isAbilitato()));
  3566.                        
  3567.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3568.             context.getLogger().info("Invocazione completata con successo");
  3569.         }
  3570.         catch(javax.ws.rs.WebApplicationException e) {
  3571.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3572.             throw e;
  3573.         }
  3574.         catch(Throwable e) {
  3575.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3576.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3577.         }
  3578.     }
  3579.    
  3580.     /**
  3581.      * Modifica i dati di una regola di correlazione applicativa per la richiesta
  3582.      *
  3583.      * Questa operazione consente di aggiornare i dati relativi ad una regola di correlazione applicativa per la richiesta
  3584.      *
  3585.      */
  3586.     @Override
  3587.     public void updateErogazioneTracciamentoCorrelazioneApplicativaRichiesta(CorrelazioneApplicativaRichiesta body, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3588.         IContext context = this.getContext();
  3589.         try {
  3590.             context.getLogger().info("Invocazione in corso ...");    

  3591.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3592.             context.getLogger().debug("Autorizzazione completata con successo");
  3593.            
  3594.             BaseHelper.throwIfNull(body);
  3595.            
  3596.             if ( body.getElemento() == null )
  3597.                 body.setElemento("");
  3598.            
  3599.             final String searchElemento = elemento.equals("*")
  3600.                     ? ""
  3601.                     : elemento;
  3602.                        
  3603.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3604.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3605.             final Long idPorta = pa.getId();
  3606.            
  3607.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  3608.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  3609.                     "Accordo Servizio Parte Specifica");
  3610.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3611.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  3612.            
  3613.             if (pa.getCorrelazioneApplicativa() == null)
  3614.                 pa.setCorrelazioneApplicativa(new org.openspcoop2.core.config.CorrelazioneApplicativa());
  3615.            
  3616.             final List<CorrelazioneApplicativaElemento> correlazioni = pa.getCorrelazioneApplicativa().getElementoList();
  3617.             final CorrelazioneApplicativaElemento oldElem = BaseHelper.findAndRemoveFirst(correlazioni, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento));
  3618.            
  3619.             if ( oldElem == null )
  3620.                 throw FaultCode.NOT_FOUND.toException("Correlazione Applicativa Richiesta per l'elemento " + elemento + " non trovata ");
  3621.            
  3622.             if ( !correlazioneApplicativaRichiestaCheckData(TipoOperazione.CHANGE, env.requestWrapper, env.pdHelper, false, body, idPorta, oldElem.getId(),
  3623.                     serviceBinding)) {
  3624.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3625.             }
  3626.            
  3627.             correlazioni.add(convert(body));
  3628.                        
  3629.             pa.getCorrelazioneApplicativa().setElementoList(correlazioni);
  3630.            
  3631.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3632.            
  3633.             context.getLogger().info("Invocazione completata con successo");
  3634.          
  3635.         }
  3636.         catch(javax.ws.rs.WebApplicationException e) {
  3637.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3638.             throw e;
  3639.         }
  3640.         catch(Throwable e) {
  3641.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3642.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3643.         }
  3644.     }
  3645.    
  3646.     /**
  3647.      * Modifica i dati di una regola di correlazione applicativa per la risposta
  3648.      *
  3649.      * Questa operazione consente di aggiornare i dati relativi ad una regola di correlazione applicativa per la risposta
  3650.      *
  3651.      */
  3652.     @Override
  3653.     public void updateErogazioneTracciamentoCorrelazioneApplicativaRisposta(CorrelazioneApplicativaRisposta body, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3654.         IContext context = this.getContext();
  3655.         try {
  3656.             context.getLogger().info("Invocazione in corso ...");    

  3657.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3658.             context.getLogger().debug("Autorizzazione completata con successo");    
  3659.            
  3660.             BaseHelper.throwIfNull(body);
  3661.            
  3662.             if ( body.getElemento() == null )
  3663.                 body.setElemento("");
  3664.            
  3665.             final String searchElemento = elemento.equals("*")
  3666.                     ? ""
  3667.                     : elemento;
  3668.                        
  3669.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3670.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3671.             final Long idPorta = pa.getId();
  3672.            
  3673.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  3674.                     .getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env),
  3675.                     "Accordo Servizio Parte Specifica");
  3676.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3677.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  3678.            
  3679.             if (pa.getCorrelazioneApplicativaRisposta() == null)
  3680.                 pa.setCorrelazioneApplicativaRisposta(new org.openspcoop2.core.config.CorrelazioneApplicativaRisposta());
  3681.            
  3682.             final List<CorrelazioneApplicativaRispostaElemento> correlazioni = pa.getCorrelazioneApplicativaRisposta().getElementoList();
  3683.             final CorrelazioneApplicativaRispostaElemento oldElem = BaseHelper.findAndRemoveFirst(correlazioni, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento));
  3684.            
  3685.             if ( oldElem == null )
  3686.                 throw FaultCode.NOT_FOUND.toException("Correlazione Applicativa Risposta per l'elemento " + elemento + " non trovata ");
  3687.            
  3688.             if ( !correlazioneApplicativaRispostaCheckData(TipoOperazione.CHANGE, env.requestWrapper, env.pdHelper, false, body, idPorta, oldElem.getId(),
  3689.                     serviceBinding)) {
  3690.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3691.             }
  3692.            
  3693.             correlazioni.add(convert(body));
  3694.                        
  3695.             pa.getCorrelazioneApplicativaRisposta().setElementoList(correlazioni);
  3696.            
  3697.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3698.        
  3699.             context.getLogger().info("Invocazione completata con successo");
  3700.        
  3701.      
  3702.         }
  3703.         catch(javax.ws.rs.WebApplicationException e) {
  3704.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3705.             throw e;
  3706.         }
  3707.         catch(Throwable e) {
  3708.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3709.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3710.         }
  3711.     }
  3712.    
  3713.     /**
  3714.      * Consente di modificare la configurazione relativa alla validazione dei contenuti applicativi
  3715.      *
  3716.      * Questa operazione consente di aggiornare la configurazione relativa alla validazione dei contenuti applicativi
  3717.      *
  3718.      */
  3719.     @Override
  3720.     public void updateErogazioneValidazione(Validazione body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3721.         IContext context = this.getContext();
  3722.         try {
  3723.             context.getLogger().info("Invocazione in corso ...");    

  3724.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3725.             context.getLogger().debug("Autorizzazione completata con successo");
  3726.            
  3727.             BaseHelper.throwIfNull(body);  
  3728.            
  3729.             final ErogazioniConfEnv env = new ErogazioniConfEnv(context.getServletRequest(), profilo, soggetto, context, nome, versione, gruppo, tipoServizio );
  3730.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(env.idPa);
  3731.            
  3732.             final String stato = BaseHelper.evalnull( () -> body.getStato().toString());
  3733.             final String tipoValidazione = BaseHelper.evalnull( () -> body.getTipo().toString() );
  3734.            
  3735.             env.requestWrapper.overrideParameter(CostantiControlStation.PARAMETRO_PORTE_XSD, stato);
  3736.             if (!env.paHelper.validazioneContenutiCheck(TipoOperazione.OTHER, false)) {
  3737.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  3738.             }
  3739.            
  3740.             final ValidazioneContenutiApplicativi vx = new ValidazioneContenutiApplicativi();
  3741.             // Imposto Mtom al valore eventualmente giĆ  presente nel db.
  3742.             vx.setAcceptMtomMessage( BaseHelper.evalnull( () -> pa.getValidazioneContenutiApplicativi().getAcceptMtomMessage()) );
  3743.             vx.setStato( StatoFunzionalitaConWarning.toEnumConstant(stato) );
  3744.             vx.setTipo( ValidazioneContenutiApplicativiTipo.toEnumConstant(tipoValidazione) );
  3745.            
  3746.             pa.setValidazioneContenutiApplicativi(vx);

  3747.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  3748.        
  3749.             context.getLogger().info("Invocazione completata con successo");
  3750.      
  3751.         }
  3752.         catch(javax.ws.rs.WebApplicationException e) {
  3753.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3754.             throw e;
  3755.         }
  3756.         catch(Throwable e) {
  3757.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3758.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3759.         }
  3760.     }
  3761.    
  3762. }