FruizioniConfigurazioneApiServiceImpl.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.fruizioni.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.PortaDelegata;
  45. import org.openspcoop2.core.config.PortaDelegataAutorizzazioneServiziApplicativi;
  46. import org.openspcoop2.core.config.PortaDelegataAutorizzazioneToken;
  47. import org.openspcoop2.core.config.PortaDelegataServizioApplicativo;
  48. import org.openspcoop2.core.config.Proprieta;
  49. import org.openspcoop2.core.config.ResponseCachingConfigurazione;
  50. import org.openspcoop2.core.config.Ruolo;
  51. import org.openspcoop2.core.config.Scope;
  52. import org.openspcoop2.core.config.ServizioApplicativo;
  53. import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
  54. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  55. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  56. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  57. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  58. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  59. import org.openspcoop2.core.config.constants.ValidazioneContenutiApplicativiTipo;
  60. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  61. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  62. import org.openspcoop2.core.config.rs.server.api.FruizioniConfigurazioneApi;
  63. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  64. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  65. import org.openspcoop2.core.config.rs.server.api.impl.IdServizio;
  66. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper;
  67. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniEnv;
  68. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  69. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKey;
  70. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKeyConfig;
  71. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneApiKeyPosizione;
  72. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneBasic;
  73. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneCustom;
  74. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazioneHttps;
  75. import org.openspcoop2.core.config.rs.server.model.APIImplAutenticazionePrincipal;
  76. import org.openspcoop2.core.config.rs.server.model.ApiCanale;
  77. import org.openspcoop2.core.config.rs.server.model.ApiImplStato;
  78. import org.openspcoop2.core.config.rs.server.model.CachingRisposta;
  79. import org.openspcoop2.core.config.rs.server.model.ConfigurazioneApiCanale;
  80. import org.openspcoop2.core.config.rs.server.model.ConfigurazioneCanaleEnum;
  81. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAttributeAuthority;
  82. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutenticazione;
  83. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutenticazioneToken;
  84. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazione;
  85. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneApplicativi;
  86. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneApplicativo;
  87. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneRuoli;
  88. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneRuolo;
  89. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneScope;
  90. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneScopes;
  91. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiAutorizzazioneView;
  92. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiGestioneToken;
  93. import org.openspcoop2.core.config.rs.server.model.ControlloAccessiIdentificazioneAttributi;
  94. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiesta;
  95. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiestaEnum;
  96. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRichiestaItem;
  97. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRisposta;
  98. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRispostaEnum;
  99. import org.openspcoop2.core.config.rs.server.model.CorrelazioneApplicativaRispostaItem;
  100. import org.openspcoop2.core.config.rs.server.model.ElencoProprieta;
  101. import org.openspcoop2.core.config.rs.server.model.GestioneCors;
  102. import org.openspcoop2.core.config.rs.server.model.ListaCorrelazioneApplicativaRichiesta;
  103. import org.openspcoop2.core.config.rs.server.model.ListaCorrelazioneApplicativaRisposta;
  104. import org.openspcoop2.core.config.rs.server.model.ListaRateLimitingPolicy;
  105. import org.openspcoop2.core.config.rs.server.model.OneOfControlloAccessiAutenticazioneAutenticazione;
  106. import org.openspcoop2.core.config.rs.server.model.RateLimitingCriteriMetricaEnum;
  107. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyFruizione;
  108. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyFruizioneUpdate;
  109. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyFruizioneView;
  110. import org.openspcoop2.core.config.rs.server.model.RateLimitingPolicyItem;
  111. import org.openspcoop2.core.config.rs.server.model.RegistrazioneMessaggi;
  112. import org.openspcoop2.core.config.rs.server.model.RegistrazioneDiagnosticiConfigurazione;
  113. import org.openspcoop2.core.config.rs.server.model.RegistrazioneTransazioniConfigurazione;
  114. import org.openspcoop2.core.config.rs.server.model.StatoFunzionalitaConWarningEnum;
  115. import org.openspcoop2.core.config.rs.server.model.TipoAutenticazioneEnum;
  116. import org.openspcoop2.core.config.rs.server.model.TipoAutenticazionePrincipalToken;
  117. import org.openspcoop2.core.config.rs.server.model.Validazione;
  118. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  119. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyFiltro;
  120. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyRaggruppamento;
  121. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  122. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  123. import org.openspcoop2.core.controllo_traffico.utils.ControlloTrafficoDriverUtils;
  124. import org.openspcoop2.core.controllo_traffico.utils.PolicyUtilities;
  125. import org.openspcoop2.core.id.IDPortaDelegata;
  126. import org.openspcoop2.core.id.IDServizioApplicativo;
  127. import org.openspcoop2.core.id.IDSoggetto;
  128. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  129. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  130. import org.openspcoop2.core.registry.constants.RuoloContesto;
  131. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  132. import org.openspcoop2.core.registry.constants.ScopeContesto;
  133. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  134. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  135. import org.openspcoop2.message.constants.ServiceBinding;
  136. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneApiKey;
  137. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazioneBasic;
  138. import org.openspcoop2.pdd.core.autenticazione.ParametriAutenticazionePrincipal;
  139. import org.openspcoop2.utils.service.BaseImpl;
  140. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  141. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  142. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  143. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  144. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  145. import org.openspcoop2.utils.service.context.IContext;
  146. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  147. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  148. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  149. import org.openspcoop2.web.ctrlstat.servlet.ApiKeyState;
  150. import org.openspcoop2.web.ctrlstat.servlet.ConsoleUtilities;
  151. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneUtilities;
  152. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCostanti;
  153. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCore;
  154. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  155. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  156. /**
  157.  * FruizioniConfigurazioneApiServiceImpl
  158.  *
  159.  * @author $Author$
  160.  * @version $Rev$, $Date$
  161.  *
  162.  */
  163. public class FruizioniConfigurazioneApiServiceImpl extends BaseImpl implements FruizioniConfigurazioneApi {

  164.     public FruizioniConfigurazioneApiServiceImpl(){
  165.         super(org.slf4j.LoggerFactory.getLogger(FruizioniConfigurazioneApiServiceImpl.class));
  166.     }

  167.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  168.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  169.     }

  170.     /**
  171.      * Aggiunta di applicativi all'elenco degli applicativi autorizzati
  172.      *
  173.      * Questa operazione consente di aggiungere applicativi all'elenco degli applicativi autorizzati
  174.      *
  175.      */
  176.     @Override
  177.     public void addFruizioneControlloAccessiAutorizzazioneApplicativi(ControlloAccessiAutorizzazioneApplicativo body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  178.         IContext context = this.getContext();
  179.         try {
  180.             context.getLogger().info("Invocazione in corso ...");    

  181.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  182.             context.getLogger().debug("Autorizzazione completata con successo");
  183.            
  184.             BaseHelper.throwIfNull(body);
  185.            
  186.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio);        
  187.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  188.            
  189.             final IDServizioApplicativo idSA = new IDServizioApplicativo();
  190.                 idSA.setIdSoggettoProprietario(env.idSoggetto.toIDSoggetto());
  191.                 idSA.setNome(body.getApplicativo());
  192.                
  193.                 if ( !TipoAutorizzazione.isAuthenticationRequired(pd.getAutorizzazione())) {
  194.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autenticazione puntuale non ĆØ abilitata");
  195.                 }
  196.            
  197.             final ServizioApplicativo sa = BaseHelper.supplyOrNonValida(
  198.                     () -> env.saCore.getServizioApplicativo(idSA),
  199.                     "Servizio Applicativo " + idSA.toString()
  200.                 );
  201.            
  202.             // Prendo la lista di servizi applicativi associati al soggetto
  203.             final org.openspcoop2.core.config.constants.CredenzialeTipo tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.toEnumConstant(pd.getAutenticazione());
  204.             if(tipoAutenticazione==null) {
  205.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non risulta abilitato un tipo di autenticazione trasporto nella fruizione selezionata");
  206.             }
  207.             Boolean appId = null;
  208.             if(org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(tipoAutenticazione)) {
  209.                 ApiKeyState apiKeyState =  new ApiKeyState(env.pdCore.getParametroAutenticazione(pd.getAutenticazione(), pd.getProprietaAutenticazioneList()));
  210.                 appId = apiKeyState.appIdSelected;
  211.             }
  212.            
  213.             boolean bothSslAndToken = false;
  214.             List<IDServizioApplicativoDB> saCompatibili = env.saCore.soggettiServizioApplicativoList(env.idSoggetto.toIDSoggetto(),env.userLogin,tipoAutenticazione, appId,
  215.                     ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT,
  216.                     bothSslAndToken, pd.getGestioneToken()!=null ? pd.getGestioneToken().getPolicy() : null);
  217.             if (!BaseHelper.findFirst(saCompatibili, s -> s.getId().equals(sa.getId())).isPresent()) {
  218.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il tipo di credenziali dell'Applicativo non sono compatibili con l'autenticazione impostata nella fruizione selezionata");
  219.             }

  220.             if ( BaseHelper.findFirst(
  221.                         pd.getServizioApplicativoList(),
  222.                         s -> s.getNome().equals(sa.getNome())
  223.                         ).isPresent()
  224.                 ) {
  225.                 throw FaultCode.CONFLITTO.toException("Servizio Applicativo giĆ  associato");
  226.             }
  227.                    
  228.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID, pd.getId().toString());
  229.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_SOGGETTO, env.idSoggetto.getId().toString());
  230.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_SERVIZIO_APPLICATIVO, sa.getNome());
  231.            
  232.             if (!env.pdHelper.porteDelegateServizioApplicativoCheckData(TipoOperazione.ADD)) {
  233.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  234.             }
  235.            
  236.            
  237.             PortaDelegataServizioApplicativo pdSa = new PortaDelegataServizioApplicativo();
  238.             pdSa.setNome(body.getApplicativo());
  239.             pd.addServizioApplicativo(pdSa);
  240.            
  241.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  242.            
  243.             context.getLogger().info("Invocazione completata con successo");
  244.        
  245.      
  246.             // Bug Fix: altrimenti viene generato 204
  247.             context.getServletResponse().setStatus(201);
  248.         }
  249.         catch(javax.ws.rs.WebApplicationException e) {
  250.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  251.             throw e;
  252.         }
  253.         catch(Throwable e) {
  254.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  255.             throw FaultCode.ERRORE_INTERNO.toException(e);
  256.         }
  257.     }
  258.    
  259.     /**
  260.      * Aggiunta di applicativi all'elenco degli applicativi token autorizzati
  261.      *
  262.      * Questa operazione consente di aggiungere applicativi all'elenco degli applicativi token autorizzati
  263.      *
  264.      */
  265.     @Override
  266.     public void addFruizioneControlloAccessiAutorizzazioneApplicativiToken(ControlloAccessiAutorizzazioneApplicativo body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  267.         IContext context = this.getContext();
  268.         try {
  269.             context.getLogger().info("Invocazione in corso ...");    

  270.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  271.             context.getLogger().debug("Autorizzazione completata con successo");    
  272.                        
  273.             BaseHelper.throwIfNull(body);
  274.            
  275.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio);        
  276.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  277.            
  278.             final IDServizioApplicativo idSA = new IDServizioApplicativo();
  279.             idSA.setIdSoggettoProprietario(env.idSoggetto.toIDSoggetto());
  280.             idSA.setNome(body.getApplicativo());
  281.            
  282.             String tokenPolicy = null;
  283.             if(pd.getGestioneToken()==null || pd.getGestioneToken().getPolicy()==null) {
  284.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per richiedente non ĆØ utilizzabile, non risulta abilitata una token policy di validazione");
  285.             }
  286.             tokenPolicy = pd.getGestioneToken().getPolicy();
  287.             if(pd.getAutorizzazioneToken()==null || !StatoFunzionalita.ABILITATO.equals(pd.getAutorizzazioneToken().getAutorizzazioneApplicativi())) {
  288.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per richiedente non ĆØ abilitata");
  289.             }
  290.            
  291.             final ServizioApplicativo sa = BaseHelper.supplyOrNonValida(
  292.                     () -> env.saCore.getServizioApplicativo(idSA),
  293.                     "Servizio Applicativo " + idSA.toString()
  294.                 );
  295.            
  296.             // Prendo la lista di servizi applicativi associati al soggetto
  297.             final org.openspcoop2.core.config.constants.CredenzialeTipo tipoAutenticazione = org.openspcoop2.core.config.constants.CredenzialeTipo.TOKEN;
  298.             Boolean appId = null;
  299.             boolean bothSslAndToken = false;
  300.             List<IDServizioApplicativoDB> saCompatibili = env.saCore.soggettiServizioApplicativoList(env.idSoggetto.toIDSoggetto(),env.userLogin,tipoAutenticazione, appId,
  301.                     ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT,
  302.                     bothSslAndToken, tokenPolicy);
  303.             if (!BaseHelper.findFirst(saCompatibili, s -> s.getId().equals(sa.getId())).isPresent()) {
  304.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il tipo di credenziali dell'Applicativo non sono compatibili con l'autenticazione impostata nella fruizione selezionata");
  305.             }

  306.             if(pd.getAutorizzazioneToken()==null) {
  307.                 pd.setAutorizzazioneToken(new PortaDelegataAutorizzazioneToken());
  308.             }
  309.             if(pd.getAutorizzazioneToken().getServiziApplicativi()==null) {
  310.                 pd.getAutorizzazioneToken().setServiziApplicativi(new PortaDelegataAutorizzazioneServiziApplicativi());
  311.             }
  312.            
  313.             if ( BaseHelper.findFirst(
  314.                         pd.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativoList(),
  315.                         s -> s.getNome().equals(sa.getNome())
  316.                         ).isPresent()
  317.                 ) {
  318.                 throw FaultCode.CONFLITTO.toException("Servizio Applicativo giĆ  associato");
  319.             }
  320.                    
  321.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID, pd.getId().toString());
  322.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_SOGGETTO, env.idSoggetto.getId().toString());
  323.             env.requestWrapper.overrideParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_SERVIZIO_APPLICATIVO, sa.getNome());
  324.            
  325.             if (!env.pdHelper.porteDelegateServizioApplicativoCheckData(TipoOperazione.ADD)) {
  326.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  327.             }
  328.            
  329.            
  330.             PortaDelegataServizioApplicativo pdSa = new PortaDelegataServizioApplicativo();
  331.             pdSa.setNome(body.getApplicativo());
  332.             pd.getAutorizzazioneToken().getServiziApplicativi().addServizioApplicativo(pdSa);
  333.            
  334.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  335.            
  336.             context.getLogger().info("Invocazione completata con successo");
  337.        
  338.      
  339.             // Bug Fix: altrimenti viene generato 204
  340.             context.getServletResponse().setStatus(201);
  341.      
  342.         }
  343.         catch(javax.ws.rs.WebApplicationException e) {
  344.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  345.             throw e;
  346.         }
  347.         catch(Throwable e) {
  348.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  349.             throw FaultCode.ERRORE_INTERNO.toException(e);
  350.         }
  351.     }

  352.     /**
  353.      * Aggiunta di ruoli all'elenco dei ruoli autorizzati
  354.      *
  355.      * Questa operazione consente di aggiungere ruoli all'elenco dei ruoli autorizzati
  356.      *
  357.      */
  358.     @Override
  359.     public void addFruizioneControlloAccessiAutorizzazioneRuoli(ControlloAccessiAutorizzazioneRuolo body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  360.         IContext context = this.getContext();
  361.         try {
  362.             context.getLogger().info("Invocazione in corso ...");    

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

  365.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  366.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  367.            
  368.             if ( !TipoAutorizzazione.isRolesRequired(pd.getAutorizzazione())) {
  369.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione per ruoli non ĆØ abilitata");
  370.                
  371.             }
  372.            
  373.             final RuoliCore ruoliCore = new RuoliCore(env.stationCore);
  374.             BaseHelper.supplyOrNonValida(
  375.                     () -> ruoliCore.getRuolo(body.getRuolo())
  376.                     , "Ruolo " + body.getRuolo()
  377.                 );
  378.            
  379.             if(pd.getRuoli()==null){
  380.                 pd.setRuoli(new AutorizzazioneRuoli());
  381.             }
  382.            
  383.             // ================================
  384.             FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  385.             filtroRuoli.setContesto(RuoloContesto.PORTA_DELEGATA);
  386.             filtroRuoli.setTipologia(RuoloTipologia.QUALSIASI);
  387.             if(TipoAutorizzazione.isInternalRolesRequired(pd.getAutorizzazione()) ){
  388.                 filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  389.             }
  390.             else if(TipoAutorizzazione.isExternalRolesRequired(pd.getAutorizzazione()) ){
  391.                 filtroRuoli.setTipologia(RuoloTipologia.ESTERNO);
  392.             }
  393.            
  394.             List<String> ruoliAmmessi = env.stationCore.getAllRuoli(filtroRuoli);
  395.            
  396.             if ( !ruoliAmmessi.contains(body.getRuolo())) {
  397.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + body.getRuolo() + "non ĆØ tra i ruoli ammissibili per il gruppo");
  398.             }
  399.            
  400.             final List<String> ruoliPresenti = pd.getRuoli().getRuoloList().stream().map( r -> r.getNome()).collect(Collectors.toList());
  401.            
  402.             if ( BaseHelper.findFirst( ruoliPresenti, r -> r.equals(body.getRuolo())).isPresent()) {
  403.                 throw FaultCode.CONFLITTO.toException("Il ruolo " + body.getRuolo() + " ĆØ giĆ  associato al gruppo scelto");
  404.             }
  405.            
  406.             if (!env.paHelper.ruoloCheckData(TipoOperazione.ADD, body.getRuolo(), ruoliPresenti)) {
  407.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  408.             }
  409.             // ================================ CHECK RUOLI
  410.            
  411.             Ruolo ruolo = new Ruolo();
  412.             ruolo.setNome(body.getRuolo());
  413.             pd.getRuoli().addRuolo(ruolo);

  414.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);

  415.             context.getLogger().info("Invocazione completata con successo");
  416.        
  417.             // Bug Fix: altrimenti viene generato 204
  418.             context.getServletResponse().setStatus(201);
  419.      
  420.         }
  421.         catch(javax.ws.rs.WebApplicationException e) {
  422.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  423.             throw e;
  424.         }
  425.         catch(Throwable e) {
  426.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  427.             throw FaultCode.ERRORE_INTERNO.toException(e);
  428.         }
  429.     }

  430.     /**
  431.      * Aggiunta di ruoli all'elenco dei ruoli token autorizzati
  432.      *
  433.      * Questa operazione consente di aggiungere ruoli all'elenco dei ruoli token autorizzati
  434.      *
  435.      */
  436.     @Override
  437.     public void addFruizioneControlloAccessiAutorizzazioneRuoliToken(ControlloAccessiAutorizzazioneRuolo body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  438.         IContext context = this.getContext();
  439.         try {
  440.             context.getLogger().info("Invocazione in corso ...");    

  441.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  442.             context.getLogger().debug("Autorizzazione completata con successo");    
  443.                        
  444.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  445.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  446.            
  447.             if(pd.getAutorizzazioneToken()==null || !StatoFunzionalita.ABILITATO.equals(pd.getAutorizzazioneToken().getAutorizzazioneRuoli())) {
  448.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione token per ruoli non ĆØ abilitata");
  449.             }
  450.            
  451.             final RuoliCore ruoliCore = new RuoliCore(env.stationCore);
  452.             BaseHelper.supplyOrNonValida(
  453.                     () -> ruoliCore.getRuolo(body.getRuolo())
  454.                     , "Ruolo " + body.getRuolo()
  455.                 );
  456.            
  457.             if(pd.getAutorizzazioneToken()==null) {
  458.                 pd.setAutorizzazioneToken(new PortaDelegataAutorizzazioneToken());
  459.             }
  460.             if(pd.getAutorizzazioneToken().getRuoli()==null) {
  461.                 pd.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  462.             }
  463.            
  464.             // ================================
  465.             FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  466.             filtroRuoli.setContesto(RuoloContesto.PORTA_DELEGATA);
  467.             filtroRuoli.setTipologia(RuoloTipologia.QUALSIASI);
  468.             if(TipoAutorizzazione.isInternalRolesRequired(pd.getAutorizzazione()) ){
  469.                 filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  470.             }
  471.             else if(TipoAutorizzazione.isExternalRolesRequired(pd.getAutorizzazione()) ){
  472.                 filtroRuoli.setTipologia(RuoloTipologia.ESTERNO);
  473.             }
  474.            
  475.             List<String> ruoliAmmessi = env.stationCore.getAllRuoli(filtroRuoli);
  476.            
  477.             if ( !ruoliAmmessi.contains(body.getRuolo())) {
  478.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + body.getRuolo() + "non ĆØ tra i ruoli ammissibili per il gruppo");
  479.             }
  480.            
  481.             final List<String> ruoliPresenti = pd.getAutorizzazioneToken().getRuoli().getRuoloList().stream().map( r -> r.getNome()).collect(Collectors.toList());
  482.            
  483.             if ( BaseHelper.findFirst( ruoliPresenti, r -> r.equals(body.getRuolo())).isPresent()) {
  484.                 throw FaultCode.CONFLITTO.toException("Il ruolo " + body.getRuolo() + " ĆØ giĆ  associato al gruppo scelto");
  485.             }
  486.            
  487.             if (!env.paHelper.ruoloCheckData(TipoOperazione.ADD, body.getRuolo(), ruoliPresenti)) {
  488.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  489.             }
  490.             // ================================ CHECK RUOLI
  491.            
  492.             Ruolo ruolo = new Ruolo();
  493.             ruolo.setNome(body.getRuolo());
  494.             pd.getAutorizzazioneToken().getRuoli().addRuolo(ruolo);

  495.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);

  496.             context.getLogger().info("Invocazione completata con successo");
  497.        
  498.             // Bug Fix: altrimenti viene generato 204
  499.             context.getServletResponse().setStatus(201);
  500.         }
  501.         catch(javax.ws.rs.WebApplicationException e) {
  502.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  503.             throw e;
  504.         }
  505.         catch(Throwable e) {
  506.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  507.             throw FaultCode.ERRORE_INTERNO.toException(e);
  508.         }
  509.     }
  510.    
  511.    /**
  512.      * Aggiunta di una proprietĆ  di configurazione
  513.      *
  514.      * Questa operazione consente di registrare una proprietĆ  di configurazione
  515.      *
  516.      */
  517.     @Override
  518.     public void addFruizioneProprieta(org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  519.         IContext context = this.getContext();
  520.         try {
  521.             context.getLogger().info("Invocazione in corso ...");    

  522.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  523.             context.getLogger().debug("Autorizzazione completata con successo");    
  524.            
  525.             BaseHelper.throwIfNull(body);  
  526.            
  527.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  528.             if(env.pdCore==null) {
  529.                 throw new CoreException("PdCore not initialized");
  530.             }
  531.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  532.            
  533.             if ((body.getNome().indexOf(" ") != -1) || (body.getValore().indexOf(" ") != -1)) {
  534.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  535.             }
  536.            
  537.             if(pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  538.                 for (Proprieta p : pd.getProprietaList()) {
  539.                     if(p.getNome().equals(body.getNome())) {
  540.                         throw FaultCode.CONFLITTO.toException("ProprietĆ  " + body.getNome() + " giĆ  assegnata alla configurazione");
  541.                     }
  542.                 }
  543.             }
  544.            
  545.             Proprieta p = new Proprieta();
  546.             p.setNome(body.getNome());
  547.             if(env.pdCore!=null && env.pdCore.getDriverBYOKUtilities()!=null &&
  548.                     body.isEncrypted()!=null && body.isEncrypted().booleanValue()) {
  549.                 p.setValore(env.pdCore.getDriverBYOKUtilities().wrap(body.getValore()));
  550.             }
  551.             else {
  552.                 if(body.getValore().length()>255) {
  553.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_255);
  554.                 }
  555.                 p.setValore(body.getValore());
  556.             }
  557.             pd.addProprieta(p);
  558.            
  559.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  560.        
  561.             context.getLogger().info("Invocazione completata con successo");
  562.      
  563.             // Bug Fix: altrimenti viene generato 204
  564.             context.getServletResponse().setStatus(201);
  565.         }
  566.         catch(javax.ws.rs.WebApplicationException e) {
  567.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  568.             throw e;
  569.         }
  570.         catch(Throwable e) {
  571.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  572.             throw FaultCode.ERRORE_INTERNO.toException(e);
  573.         }
  574.     }

  575.     /**
  576.      * Aggiunta di scope all'elenco degli scope autorizzati
  577.      *
  578.      * Questa operazione consente di aggiungere scope all'elenco degli scope autorizzati
  579.      *
  580.      */
  581.     @Override
  582.     public void addFruizioneControlloAccessiAutorizzazioneScope(ControlloAccessiAutorizzazioneScope body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  583.         IContext context = this.getContext();
  584.         try {
  585.             context.getLogger().info("Invocazione in corso ...");    

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

  588.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  589.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  590.            
  591.             if(pd.getScope()==null) {
  592.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'autorizzazione per scope non ĆØ abilitata");
  593.             }
  594.            
  595.             // ==================
  596.             FiltroRicercaScope filtroScope = new FiltroRicercaScope();
  597.             filtroScope.setContesto(ScopeContesto.PORTA_APPLICATIVA);
  598.             filtroScope.setTipologia("");
  599.            
  600.             final List<String> scopeAmmessi = env.stationCore.getAllScope(filtroScope);
  601.             final List<String> scopePresenti = pd.getScope().getScopeList().stream().map(Scope::getNome).collect(Collectors.toList());
  602.            
  603.             if ( !scopeAmmessi.contains(body.getScope())) {
  604.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Scope " + body.getScope() + " non presente fra gli scope ammissibili.");
  605.             }
  606.            
  607.             if ( scopePresenti.contains(body.getScope()) ) {
  608.                 throw FaultCode.CONFLITTO.toException("Scope " + body.getScope() + " giĆ  assegnato al gruppo");
  609.             }
  610.            
  611.             if (!env.paHelper.scopeCheckData(TipoOperazione.ADD, body.getScope(), scopePresenti )) {
  612.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  613.                
  614.             }
  615.             // ================= CHECK SCOPE
  616.            
  617.             Scope scope = new Scope();
  618.             scope.setNome(body.getScope());
  619.             pd.getScope().addScope(scope);
  620.            
  621.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  622.        
  623.             context.getLogger().info("Invocazione completata con successo");
  624.      
  625.             // Bug Fix: altrimenti viene generato 204
  626.             context.getServletResponse().setStatus(201);
  627.            
  628.         }
  629.         catch(javax.ws.rs.WebApplicationException e) {
  630.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  631.             throw e;
  632.         }
  633.         catch(Throwable e) {
  634.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  635.             throw FaultCode.ERRORE_INTERNO.toException(e);
  636.         }
  637.     }
  638.    
  639.     /**
  640.      * Aggiunta di una policy di rate limiting
  641.      *
  642.      * Questa operazione consente di aggiungere una policy di rate limiting
  643.      *
  644.      */
  645.     @Override
  646.     public void addFruizioneRateLimitingPolicy(RateLimitingPolicyFruizione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  647.         IContext context = this.getContext();
  648.         try {
  649.             context.getLogger().info("Invocazione in corso ...");    

  650.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  651.             context.getLogger().debug("Autorizzazione completata con successo");    
  652.                        
  653.             BaseHelper.throwIfNull(body);

  654.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  655.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);

  656.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  657.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  658.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  659.                     "Fruizione");
  660.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  661.            
  662.             final RuoloPolicy ruoloPorta = RuoloPolicy.DELEGATA;
  663.             final String nomePorta = pd.getNome();
  664.                        
  665.             AttivazionePolicy policy = new AttivazionePolicy();
  666.             policy.setFiltro(new AttivazionePolicyFiltro());
  667.             policy.setGroupBy(new AttivazionePolicyRaggruppamento());
  668.            
  669.             String modalita = ErogazioniApiHelper.getDataElementModalita(body.getConfigurazione().getIdentificazione());
  670.            
  671.             String idPolicy = ErogazioniApiHelper.getIdPolicy(body, env.confCore, env.confHelper);
  672.             if(idPolicy==null) {
  673.                 switch (body.getConfigurazione().getIdentificazione()) {
  674.                 case POLICY:
  675.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Policy Utente non trovata");
  676.                 case CRITERI:
  677.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Policy Built-In non trovata che rispettano i criteri forniti");
  678.                 }
  679.             }
  680.             policy.setIdPolicy(idPolicy);
  681.            
  682.             // Questo lo prendo paro paro dal codice della console.
  683.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  684.             String serialId = env.confCore.getNextPolicyInstanceSerialId(infoPolicy.getIdPolicy());
  685.             policy.setIdActivePolicy(ControlloTrafficoDriverUtils.buildIdActivePolicy(infoPolicy.getIdPolicy(), serialId));
  686.    
  687.             ErogazioniApiHelper.override(infoPolicy.getTipoRisorsa(), body, env.protocolFactory.getProtocol(),  env.idSoggetto.toIDSoggetto(), env.requestWrapper);
  688.             // Dati Attivazione
  689.             String errorAttivazione = env.confHelper.readDatiAttivazionePolicyFromHttpParameters(policy, false, TipoOperazione.ADD, infoPolicy);
  690.             if ( !StringUtils.isEmpty(errorAttivazione) ) {
  691.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(errorAttivazione));
  692.             }
  693.            
  694.             policy.getFiltro().setEnabled(true);
  695.             policy.getFiltro().setProtocollo(env.tipo_protocollo);
  696.             policy.getFiltro().setRuoloPorta(ruoloPorta);
  697.             policy.getFiltro().setNomePorta(nomePorta);

  698.             policy.getFiltro().setTipoFruitore(pd.getTipoSoggettoProprietario());
  699.             policy.getFiltro().setNomeFruitore(pd.getNomeSoggettoProprietario());

  700.             StringBuilder existsMessage = new StringBuilder();
  701.             if ( ConfigurazioneUtilities.alreadyExists(
  702.                     TipoOperazione.ADD,
  703.                     env.confCore,
  704.                     env.confHelper,
  705.                     policy,
  706.                     infoPolicy,
  707.                     ruoloPorta,
  708.                     nomePorta,
  709.                     env.apcCore.toMessageServiceBinding(apc.getServiceBinding()),
  710.                     existsMessage,
  711.                     org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE,
  712.                     modalita
  713.                 )) {
  714.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  715.             }
  716.             // Qui viene sollevata eccezione se il check non viene superato
  717.             FruizioniConfigurazioneHelper.attivazionePolicyCheckData(TipoOperazione.ADD, pd, policy,infoPolicy, env, env.apcCore.toMessageServiceBinding(apc.getServiceBinding()), modalita);
  718.            
  719.             // aggiorno prossima posizione nella policy
  720.             ConfigurazioneUtilities.updatePosizioneAttivazionePolicy(env.confCore, infoPolicy, policy, ruoloPorta, nomePorta);
  721.            
  722.             env.confCore.performCreateOperation(env.userLogin, false, policy);
  723.            
  724.             context.getLogger().info("Invocazione completata con successo");
  725.            
  726.             // Bug Fix: altrimenti viene generato 204
  727.             context.getServletResponse().setStatus(201);
  728.         }
  729.         catch(javax.ws.rs.WebApplicationException e) {
  730.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  731.             throw e;
  732.         }
  733.         catch(Throwable e) {
  734.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  735.             throw FaultCode.ERRORE_INTERNO.toException(e);
  736.         }
  737.     }
  738.    
  739.     /**
  740.      * Aggiunta di una regola di correlazione applicativa
  741.      *
  742.      * Questa operazione consente di registrare una regola di correlazione applicativa per la richiesta
  743.      *
  744.      */
  745.     @Override
  746.     public void addFruizioneTracciamentoCorrelazioneApplicativaRichiesta(CorrelazioneApplicativaRichiesta body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  747.         IContext context = this.getContext();
  748.         try {
  749.             context.getLogger().info("Invocazione in corso ...");    

  750.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  751.             context.getLogger().debug("Autorizzazione completata con successo");    
  752.            
  753.             BaseHelper.throwIfNull(body);
  754.            
  755.             if ( body.getElemento() == null )
  756.                 body.setElemento("");              
  757.                        
  758.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  759.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  760.             final Long idPorta = pd.getId();
  761.            
  762.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  763.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  764.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  765.                     "Fruizione");
  766.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  767.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  768.            
  769.             StringBuilder existsMessage = new StringBuilder();
  770.             if ( ConsoleUtilities.alreadyExistsCorrelazioneApplicativaRichiesta(env.pdCore, idPorta, body.getElemento(), 0, existsMessage)) {
  771.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  772.             }

  773.            
  774.             if ( !correlazioneApplicativaRichiestaCheckData(TipoOperazione.ADD, env.requestWrapper, env.paHelper, true, body, idPorta, null,
  775.                     serviceBinding) ) {
  776.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  777.             }
  778.                                    
  779.             CorrelazioneApplicativa ca = pd.getCorrelazioneApplicativa();
  780.             if (ca == null) {
  781.                 ca = new CorrelazioneApplicativa();
  782.             }
  783.             ca.addElemento(convert(body));
  784.             pd.setCorrelazioneApplicativa(ca);
  785.            
  786.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  787.        
  788.             context.getLogger().info("Invocazione completata con successo");
  789.        
  790.             // Bug Fix: altrimenti viene generato 204
  791.             context.getServletResponse().setStatus(201);
  792.         }
  793.         catch(javax.ws.rs.WebApplicationException e) {
  794.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  795.             throw e;
  796.         }
  797.         catch(Throwable e) {
  798.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  799.             throw FaultCode.ERRORE_INTERNO.toException(e);
  800.         }
  801.     }
  802.    
  803.     /**
  804.      * Aggiunta di una regola di correlazione applicativa
  805.      *
  806.      * Questa operazione consente di registrare una regola di correlazione applicativa per la risposta
  807.      *
  808.      */
  809.     @Override
  810.     public void addFruizioneTracciamentoCorrelazioneApplicativaRisposta(CorrelazioneApplicativaRisposta body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  811.         IContext context = this.getContext();
  812.         try {
  813.             context.getLogger().info("Invocazione in corso ...");    

  814.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  815.             context.getLogger().debug("Autorizzazione completata con successo");
  816.            
  817.             BaseHelper.throwIfNull(body);
  818.            
  819.             if ( body.getElemento() == null )
  820.                 body.setElemento("");              
  821.                        
  822.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  823.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  824.             final Long idPorta = pd.getId();
  825.            
  826.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  827.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  828.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  829.                     "Fruizione");
  830.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  831.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  832.            
  833.             StringBuilder existsMessage = new StringBuilder();
  834.             if ( ConsoleUtilities.alreadyExistsCorrelazioneApplicativaRisposta(env.pdCore, idPorta, body.getElemento(), 0, existsMessage)) {
  835.                 throw FaultCode.CONFLITTO.toException(StringEscapeUtils.unescapeHtml(existsMessage.toString()));
  836.             }
  837.            
  838.             if ( !correlazioneApplicativaRispostaCheckData(TipoOperazione.ADD, env.requestWrapper, env.pdHelper, true, body, idPorta, null,
  839.                     serviceBinding)) {
  840.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  841.             }
  842.                                
  843.             if ( pd.getCorrelazioneApplicativaRisposta() == null)
  844.                 pd.setCorrelazioneApplicativaRisposta(new org.openspcoop2.core.config.CorrelazioneApplicativaRisposta());
  845.            
  846.             pd.getCorrelazioneApplicativaRisposta().addElemento(convert(body));
  847.            
  848.            
  849.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  850.             context.getLogger().info("Invocazione completata con successo");
  851.        
  852.             // Bug Fix: altrimenti viene generato 204
  853.             context.getServletResponse().setStatus(201);
  854.         }
  855.         catch(javax.ws.rs.WebApplicationException e) {
  856.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  857.             throw e;
  858.         }
  859.         catch(Throwable e) {
  860.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  861.             throw FaultCode.ERRORE_INTERNO.toException(e);
  862.         }
  863.     }
  864.    
  865.     /**
  866.      * Elimina applicativi dall'elenco degli applicativi autorizzati
  867.      *
  868.      * Questa operazione consente di eliminare applicativi dall'elenco degli applicativi autorizzati
  869.      *
  870.      */
  871.     @Override
  872.     public void deleteFruizioneControlloAccessiAutorizzazioneApplicativi(String erogatore, String nome, Integer versione, String applicativoAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  873.         IContext context = this.getContext();
  874.         try {
  875.             context.getLogger().info("Invocazione in corso ...");    

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

  878.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  879.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  880.            
  881.             PortaDelegataServizioApplicativo to_remove = BaseHelper.findAndRemoveFirst(pd.getServizioApplicativoList(), sa -> sa.getNome().equals(applicativoAutorizzato));
  882.            
  883.             if (env.delete_404 && to_remove == null) {
  884.                 throw FaultCode.NOT_FOUND.toException("Nessun Applicativo " + applicativoAutorizzato + " ĆØ associato al gruppo scelto");
  885.             } else if ( to_remove != null ) {
  886.            
  887.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  888.             }
  889.             context.getLogger().info("Invocazione completata con successo");
  890.        
  891.      
  892.         }
  893.         catch(javax.ws.rs.WebApplicationException e) {
  894.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  895.             throw e;
  896.         }
  897.         catch(Throwable e) {
  898.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  899.             throw FaultCode.ERRORE_INTERNO.toException(e);
  900.         }
  901.     }
  902.    
  903.    /**
  904.      * Elimina applicativi dall'elenco degli applicativi token autorizzati
  905.      *
  906.      * Questa operazione consente di eliminare applicativi dall'elenco degli applicativi token autorizzati
  907.      *
  908.      */
  909.     @Override
  910.     public void deleteFruizioneControlloAccessiAutorizzazioneApplicativiToken(String erogatore, String nome, Integer versione, String applicativoAutorizzato, 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.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  918.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  919.            
  920.             if(pd.getAutorizzazioneToken()==null) {
  921.                 pd.setAutorizzazioneToken(new PortaDelegataAutorizzazioneToken());
  922.             }
  923.             if(pd.getAutorizzazioneToken().getServiziApplicativi()==null) {
  924.                 pd.getAutorizzazioneToken().setServiziApplicativi(new PortaDelegataAutorizzazioneServiziApplicativi());
  925.             }
  926.            
  927.             PortaDelegataServizioApplicativo to_remove = BaseHelper.findAndRemoveFirst(pd.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativoList(), sa -> sa.getNome().equals(applicativoAutorizzato));
  928.            
  929.             if (env.delete_404 && to_remove == null) {
  930.                 throw FaultCode.NOT_FOUND.toException("Nessun Applicativo " + applicativoAutorizzato + " ĆØ associato al gruppo scelto");
  931.             } else if ( to_remove != null ) {
  932.            
  933.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  934.             }
  935.             context.getLogger().info("Invocazione completata con successo");
  936.      
  937.         }
  938.         catch(javax.ws.rs.WebApplicationException e) {
  939.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  940.             throw e;
  941.         }
  942.         catch(Throwable e) {
  943.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  944.             throw FaultCode.ERRORE_INTERNO.toException(e);
  945.         }
  946.     }

  947.     /**
  948.      * Elimina ruoli dall'elenco dei ruoli autorizzati
  949.      *
  950.      * Questa operazione consente di eliminare ruoli dall'elenco dei ruoli autorizzati
  951.      *
  952.      */
  953.     @Override
  954.     public void deleteFruizioneControlloAccessiAutorizzazioneRuoli(String erogatore, String nome, Integer versione, String ruoloAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  955.         IContext context = this.getContext();
  956.         try {
  957.             context.getLogger().info("Invocazione in corso ...");    

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

  960.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  961.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  962.            
  963.             if (pd.getRuoli() == null)  pd.setRuoli(new AutorizzazioneRuoli());
  964.            
  965.             Ruolo to_remove = BaseHelper.findAndRemoveFirst(pd.getRuoli().getRuoloList(), r -> r.getNome().equals(ruoloAutorizzato));
  966.            
  967.             if (env.delete_404 && to_remove == null) {
  968.                 throw FaultCode.NOT_FOUND.toException("Nessun Ruolo " + ruoloAutorizzato + " ĆØ associato al gruppo scelto");
  969.             } else if ( to_remove != null ) {
  970.            
  971.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  972.             }
  973.            
  974.             context.getLogger().info("Invocazione completata con successo");    
  975.         }
  976.         catch(javax.ws.rs.WebApplicationException e) {
  977.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  978.             throw e;
  979.         }
  980.         catch(Throwable e) {
  981.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  982.             throw FaultCode.ERRORE_INTERNO.toException(e);
  983.         }
  984.     }
  985.    
  986.     /**
  987.      * Elimina ruoli dall'elenco dei ruoli token autorizzati
  988.      *
  989.      * Questa operazione consente di eliminare ruoli dall'elenco dei ruoli token autorizzati
  990.      *
  991.      */
  992.     @Override
  993.     public void deleteFruizioneControlloAccessiAutorizzazioneRuoliToken(String erogatore, String nome, Integer versione, String ruoloAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  994.         IContext context = this.getContext();
  995.         try {
  996.             context.getLogger().info("Invocazione in corso ...");    

  997.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  998.             context.getLogger().debug("Autorizzazione completata con successo");    
  999.                        
  1000.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1001.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1002.            
  1003.             if(pd.getAutorizzazioneToken()==null) {
  1004.                 pd.setAutorizzazioneToken(new PortaDelegataAutorizzazioneToken());
  1005.             }
  1006.             if(pd.getAutorizzazioneToken().getRuoli()==null) {
  1007.                 pd.getAutorizzazioneToken().setRuoli(new AutorizzazioneRuoli());
  1008.             }
  1009.            
  1010.             Ruolo to_remove = BaseHelper.findAndRemoveFirst(pd.getAutorizzazioneToken().getRuoli().getRuoloList(), r -> r.getNome().equals(ruoloAutorizzato));
  1011.            
  1012.             if (env.delete_404 && to_remove == null) {
  1013.                 throw FaultCode.NOT_FOUND.toException("Nessun Ruolo " + ruoloAutorizzato + " ĆØ associato al gruppo scelto");
  1014.             } else if ( to_remove != null ) {
  1015.            
  1016.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  1017.             }
  1018.            
  1019.             context.getLogger().info("Invocazione completata con successo");  
  1020.         }
  1021.         catch(javax.ws.rs.WebApplicationException e) {
  1022.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1023.             throw e;
  1024.         }
  1025.         catch(Throwable e) {
  1026.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1027.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1028.         }
  1029.     }

  1030.    /**
  1031.      * Elimina la proprietĆ  di configurazione dall&#x27;elenco di quelle attivate
  1032.      *
  1033.      * Questa operazione consente di eliminare la proprietĆ  di configurazione dall&#x27;elenco di quelle attivate
  1034.      *
  1035.      */
  1036.     @Override
  1037.     public void deleteFruizioneProprietaConfigurazione(String erogatore, String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1038.         IContext context = this.getContext();
  1039.         try {
  1040.             context.getLogger().info("Invocazione in corso ...");    

  1041.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1042.             context.getLogger().debug("Autorizzazione completata con successo");    
  1043.                        
  1044.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1045.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1046.            
  1047.             Proprieta to_remove = null;
  1048.             if(pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  1049.                 to_remove = BaseHelper.findAndRemoveFirst(pd.getProprietaList(), p -> p.getNome().equals(proprieta));
  1050.             }
  1051.            
  1052.             if (env.delete_404 && to_remove == null) {
  1053.                 throw FaultCode.NOT_FOUND.toException("Nessuna proprietĆ  ĆØ presente nella configurazione con nome '"+proprieta+"'");
  1054.             } else if ( to_remove != null ) {
  1055.            
  1056.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  1057.             }
  1058.        
  1059.             context.getLogger().info("Invocazione completata con successo");        
  1060.         }
  1061.         catch(javax.ws.rs.WebApplicationException e) {
  1062.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1063.             throw e;
  1064.         }
  1065.         catch(Throwable e) {
  1066.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1067.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1068.         }
  1069.     }

  1070.     /**
  1071.      * Elimina scope dall'elenco degli scope autorizzati
  1072.      *
  1073.      * Questa operazione consente di eliminare scope dall'elenco degli scope autorizzati
  1074.      *
  1075.      */
  1076.     @Override
  1077.     public void deleteFruizioneControlloAccessiAutorizzazioneScope(String erogatore, String nome, Integer versione, String scopeAutorizzato, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1078.         IContext context = this.getContext();
  1079.         try {
  1080.             context.getLogger().info("Invocazione in corso ...");    

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

  1083.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1084.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1085.            
  1086.             if (pd.getScope() == null)  pd.setScope(new AutorizzazioneScope());
  1087.            
  1088.             Scope to_remove = BaseHelper.findAndRemoveFirst(pd.getScope().getScopeList(), s -> s.getNome().equals(scopeAutorizzato));
  1089.            
  1090.             if (env.delete_404 && to_remove == null) {
  1091.                 throw FaultCode.NOT_FOUND.toException("Nessuno scope " + scopeAutorizzato + " ĆØ associato al gruppo scelto");
  1092.             } else if ( to_remove != null ) {
  1093.            
  1094.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  1095.             }
  1096.            
  1097.             context.getLogger().info("Invocazione completata con successo");        
  1098.      
  1099.         }
  1100.         catch(javax.ws.rs.WebApplicationException e) {
  1101.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1102.             throw e;
  1103.         }
  1104.         catch(Throwable e) {
  1105.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1106.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1107.         }
  1108.     }
  1109.    
  1110.     /**
  1111.      * Elimina la policy dall'elenco delle policies attive
  1112.      *
  1113.      * Questa operazione consente di eliminare la policy dall'elenco delle policies attive
  1114.      *
  1115.      */
  1116.     @Override
  1117.     public void deleteFruizioneRateLimitingPolicy(String erogatore, String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1118.         IContext context = this.getContext();
  1119.         try {
  1120.             context.getLogger().info("Invocazione in corso ...");    

  1121.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1122.             context.getLogger().debug("Autorizzazione completata con successo");    
  1123.                        
  1124.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1125.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1126.            
  1127.             List<AttivazionePolicy> policies = env.confCore.attivazionePolicyList(null, RuoloPolicy.DELEGATA, pd.getNome());
  1128.             AttivazionePolicy policy = BaseHelper.findFirst( policies, p -> (PolicyUtilities.getNomeActivePolicy(p.getAlias(),p.getIdActivePolicy())).equals(idPolicy) ).orElse(null);
  1129.            
  1130.             if ( policy != null ) {
  1131.                 StringBuilder inUsoMessage = new StringBuilder();
  1132.                 List<AttivazionePolicy> policyRimosse = new ArrayList<AttivazionePolicy>();
  1133.                
  1134.                 ConfigurazioneUtilities.deleteAttivazionePolicy(
  1135.                         new ArrayList<AttivazionePolicy>(Arrays.asList( policy )),
  1136.                         env.confHelper,
  1137.                         env.confCore,
  1138.                         env.userLogin,
  1139.                         inUsoMessage,
  1140.                         org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE, policyRimosse
  1141.                     );
  1142.                
  1143.                 if ( inUsoMessage.length() > 0 ) {
  1144.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  1145.                 }
  1146.                
  1147.             }
  1148.             else if ( env.delete_404 ) {
  1149.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con id " + idPolicy );
  1150.             }

  1151.             context.getLogger().info("Invocazione completata con successo");
  1152.         }
  1153.         catch(javax.ws.rs.WebApplicationException e) {
  1154.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1155.             throw e;
  1156.         }
  1157.         catch(Throwable e) {
  1158.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1159.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1160.         }
  1161.     }
  1162.    
  1163.     /**
  1164.      * Elimina la regola di correlazione applicativa dall'elenco di quelle attivate per la richiesta
  1165.      *
  1166.      * Questa operazione consente di eliminare la regola di correlazione applicativa dall'elenco di quelle attivate per la richiesta
  1167.      *
  1168.      */
  1169.     @Override
  1170.     public void deleteFruizioneTracciamentoCorrelazioneApplicativaRichiesta(String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1171.         IContext context = this.getContext();
  1172.         try {
  1173.             context.getLogger().info("Invocazione in corso ...");    

  1174.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1175.             context.getLogger().debug("Autorizzazione completata con successo");    
  1176.                          
  1177.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1178.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1179.            
  1180.             final CorrelazioneApplicativa correlazioneApplicativa = pd.getCorrelazioneApplicativa();
  1181.            
  1182.             final String searchElemento = elemento.equals("*")
  1183.                     ? ""
  1184.                     : elemento;
  1185.                                    
  1186.             CorrelazioneApplicativaElemento to_del = BaseHelper.evalnull( () -> BaseHelper.findAndRemoveFirst(
  1187.                     correlazioneApplicativa.getElementoList(),
  1188.                     e -> (e.getNome()==null ? "" : e.getNome()).equals(searchElemento)
  1189.                 ));
  1190.            
  1191.             if ( to_del != null ) {
  1192.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  1193.             }
  1194.            
  1195.             else if (env.delete_404) {
  1196.                 throw FaultCode.NOT_FOUND.toException("Correlazione applicativa per l'elemento " + elemento + " non trovata");
  1197.             }
  1198.            
  1199.            
  1200.             context.getLogger().info("Invocazione completata con successo");
  1201.        
  1202.      
  1203.         }
  1204.         catch(javax.ws.rs.WebApplicationException e) {
  1205.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1206.             throw e;
  1207.         }
  1208.         catch(Throwable e) {
  1209.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1210.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1211.         }
  1212.     }
  1213.    
  1214.     /**
  1215.      * Elimina la regola di correlazione applicativa dall'elenco di quelle attivate per la risposta
  1216.      *
  1217.      * Questa operazione consente di eliminare la regola di correlazione applicativa dall'elenco di quelle attivate per la risposta
  1218.      *
  1219.      */
  1220.     @Override
  1221.     public void deleteFruizioneTracciamentoCorrelazioneApplicativaRisposta(String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1222.         IContext context = this.getContext();
  1223.         try {
  1224.             context.getLogger().info("Invocazione in corso ...");    

  1225.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1226.             context.getLogger().debug("Autorizzazione completata con successo");    
  1227.                        
  1228.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1229.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1230.            
  1231.             org.openspcoop2.core.config.CorrelazioneApplicativaRisposta correlazioneApplicativa = pd.getCorrelazioneApplicativaRisposta();
  1232.            
  1233.             final String searchElemento = elemento.equals("*")
  1234.                     ? ""
  1235.                     : elemento;
  1236.                                    
  1237.             CorrelazioneApplicativaRispostaElemento to_del = BaseHelper.evalnull( () -> BaseHelper.findAndRemoveFirst(
  1238.                     correlazioneApplicativa.getElementoList(),
  1239.                     e -> (e.getNome()==null ? "" : e.getNome()).equals(searchElemento)
  1240.                 ));
  1241.            
  1242.             if ( to_del != null ) {
  1243.                 env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  1244.             }
  1245.            
  1246.             else if (env.delete_404) {
  1247.                 throw FaultCode.NOT_FOUND.toException("Correlazione applicativa per l'elemento " + elemento + " non trovata");
  1248.             }        
  1249.             context.getLogger().info("Invocazione completata con successo");
  1250.        
  1251.      
  1252.         }
  1253.         catch(javax.ws.rs.WebApplicationException e) {
  1254.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1255.             throw e;
  1256.         }
  1257.         catch(Throwable e) {
  1258.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1259.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1260.         }
  1261.     }
  1262.    
  1263.     /**
  1264.      * Restituisce la policy XACML associata all'autorizzazione
  1265.      *
  1266.      * Questa operazione consente di ottenere la policy XACML associata all'autorizzazione
  1267.      *
  1268.      */
  1269.     @Override
  1270.     public byte[] downloadFruizioneControlloAccessiAutorizzazioneXacmlPolicy(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1271.         IContext context = this.getContext();
  1272.         try {
  1273.             context.getLogger().info("Invocazione in corso ...");    

  1274.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1275.             context.getLogger().debug("Autorizzazione completata con successo");
  1276.            
  1277.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1278.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1279.            
  1280.             if (pd.getXacmlPolicy() == null)
  1281.                 throw FaultCode.NOT_FOUND.toException("Xacml policy non assegnata al gruppo scelto");
  1282.                        
  1283.             context.getLogger().info("Invocazione completata con successo");
  1284.             return pd.getXacmlPolicy().getBytes();
  1285.      
  1286.         }
  1287.         catch(javax.ws.rs.WebApplicationException e) {
  1288.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1289.             throw e;
  1290.         }
  1291.         catch(Throwable e) {
  1292.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1293.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1294.         }
  1295.     }
  1296.    
  1297.     /**
  1298.      * Restituisce l'elenco delle policy di rate limiting configurate
  1299.      *
  1300.      * Questa operazione consente di ottenere l'elenco delle policy di rate limiting configurate
  1301.      *
  1302.      */
  1303.     @Override
  1304.     public ListaRateLimitingPolicy findAllFruizioneRateLimitingPolicies(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset, RateLimitingCriteriMetricaEnum metrica) {
  1305.         IContext context = this.getContext();
  1306.         try {
  1307.             context.getLogger().info("Invocazione in corso ...");    

  1308.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1309.             context.getLogger().debug("Autorizzazione completata con successo");    
  1310.                        
  1311.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1312.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1313.            
  1314.             final int idLista = Liste.CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY;
  1315.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1316.             if(metrica!=null) {
  1317.                 String risorsa = ErogazioniApiHelper.getDataElementModalitaRisorsa(metrica);
  1318.                 ricerca.addFilter(idLista, Filtri.FILTRO_TIPO_RISORSA_POLICY, risorsa);
  1319.             }
  1320.             List<AttivazionePolicy> policies = env.confCore.attivazionePolicyList(ricerca, RuoloPolicy.DELEGATA, pd.getNome());

  1321.             if ( env.findall_404 && policies.isEmpty() ) {
  1322.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting associata");
  1323.             }
  1324.            
  1325.             ListaRateLimitingPolicy ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1326.                     ricerca.getIndexIniziale(idLista),
  1327.                     ricerca.getPageSize(idLista),
  1328.                     ricerca.getNumEntries(idLista), ListaRateLimitingPolicy.class);
  1329.            
  1330.             policies.forEach( p -> {
  1331.                 RateLimitingPolicyItem item = new RateLimitingPolicyItem();
  1332.                 item.setNome(PolicyUtilities.getNomeActivePolicy(p.getAlias(), p.getIdActivePolicy()));
  1333.                 ret.addItemsItem(item);
  1334.             });
  1335.            
  1336.             context.getLogger().info("Invocazione completata con successo");
  1337.             return ret;
  1338.    
  1339.         }
  1340.         catch(javax.ws.rs.WebApplicationException e) {
  1341.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1342.             throw e;
  1343.         }
  1344.         catch(Throwable e) {
  1345.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1346.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1347.         }
  1348.     }
  1349.    
  1350.     /**
  1351.      * Restituisce l'elenco delle regole di correlazione applicativa per la richiesta
  1352.      *
  1353.      * Questa operazione consente di ottenere l'elenco delle regole di correlazione applicativa per la richiesta
  1354.      *
  1355.      */
  1356.     @Override
  1357.     public ListaCorrelazioneApplicativaRichiesta findAllFruizioneTracciamentoCorrelazioneApplicativaRichiesta(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset) {
  1358.         IContext context = this.getContext();
  1359.         try {
  1360.             context.getLogger().info("Invocazione in corso ...");    

  1361.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1362.             context.getLogger().debug("Autorizzazione completata con successo");    
  1363.                        
  1364.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1365.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1366.            
  1367.             final int idLista = Liste.PORTE_DELEGATE_CORRELAZIONE_APPLICATIVA;
  1368.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1369.            
  1370.             List<CorrelazioneApplicativaElemento> lista = env.pdCore.porteDelegateCorrelazioneApplicativaList(pd.getId().intValue(), ricerca);

  1371.             if ( env.findall_404 && lista.isEmpty() ) {
  1372.                 throw FaultCode.NOT_FOUND.toException("Nessuna regola di correlazione applicativa associata");
  1373.             }
  1374.            
  1375.             ListaCorrelazioneApplicativaRichiesta ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1376.                     ricerca.getIndexIniziale(idLista),
  1377.                     ricerca.getPageSize(idLista),
  1378.                     ricerca.getNumEntries(idLista), ListaCorrelazioneApplicativaRichiesta.class);
  1379.            
  1380.             lista.forEach( c -> {
  1381.                 CorrelazioneApplicativaRichiestaItem item = new CorrelazioneApplicativaRichiestaItem();
  1382.                 item.setElemento( StringUtils.isEmpty(c.getNome())
  1383.                         ? "*"
  1384.                         : c.getNome()
  1385.                     );
  1386.                
  1387.                 item.setIdentificazioneTipo(CorrelazioneApplicativaRichiestaEnum.valueOf(c.getIdentificazione().name()));
  1388.                 ret.addItemsItem(item);
  1389.             });
  1390.        
  1391.        
  1392.             context.getLogger().info("Invocazione completata con successo");
  1393.             return ret;
  1394.      
  1395.         }
  1396.         catch(javax.ws.rs.WebApplicationException e) {
  1397.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1398.             throw e;
  1399.         }
  1400.         catch(Throwable e) {
  1401.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1402.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1403.         }
  1404.     }
  1405.    
  1406.     /**
  1407.      * Restituisce l'elenco delle regole di correlazione applicativa per la risposta
  1408.      *
  1409.      * Questa operazione consente di ottenere l'elenco delle regole di correlazione applicativa per la risposta
  1410.      *
  1411.      */
  1412.     @Override
  1413.     public ListaCorrelazioneApplicativaRisposta findAllFruizioneTracciamentoCorrelazioneApplicativaRisposta(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio, String q, Integer limit, Integer offset) {
  1414.         IContext context = this.getContext();
  1415.         try {
  1416.             context.getLogger().info("Invocazione in corso ...");    

  1417.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1418.             context.getLogger().debug("Autorizzazione completata con successo");    
  1419.        
  1420.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1421.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1422.            
  1423.             final int idLista = Liste.PORTE_DELEGATE_CORRELAZIONE_APPLICATIVA_RISPOSTA;
  1424.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  1425.            
  1426.             List<CorrelazioneApplicativaRispostaElemento> lista = env.pdCore.porteDelegateCorrelazioneApplicativaRispostaList(pd.getId().intValue(), ricerca);

  1427.             if ( env.findall_404 && lista.isEmpty() ) {
  1428.                 throw FaultCode.NOT_FOUND.toException("Nessuna regola di correlazione applicativa della risposta associata");
  1429.             }
  1430.            
  1431.             ListaCorrelazioneApplicativaRisposta ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  1432.                     ricerca.getIndexIniziale(idLista),
  1433.                     ricerca.getPageSize(idLista),
  1434.                     ricerca.getNumEntries(idLista), ListaCorrelazioneApplicativaRisposta.class);
  1435.            
  1436.             lista.forEach( c -> {
  1437.                 CorrelazioneApplicativaRispostaItem item = new CorrelazioneApplicativaRispostaItem();
  1438.                 item.setElemento( StringUtils.isEmpty(c.getNome())
  1439.                         ? "*"
  1440.                         : c.getNome()
  1441.                     );          
  1442.                 item.setIdentificazioneTipo(CorrelazioneApplicativaRispostaEnum.valueOf(c.getIdentificazione().name()));
  1443.                 ret.addItemsItem(item);
  1444.             });        
  1445.            
  1446.             context.getLogger().info("Invocazione completata con successo");
  1447.             return ret;
  1448.              
  1449.         }
  1450.         catch(javax.ws.rs.WebApplicationException e) {
  1451.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1452.             throw e;
  1453.         }
  1454.         catch(Throwable e) {
  1455.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1456.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1457.         }
  1458.     }
  1459.    
  1460.     /**
  1461.      * Restituisce la configurazione relativa al caching delle risposte
  1462.      *
  1463.      * Questa operazione consente di ottenere la configurazione relativa al caching delle risposte
  1464.      *
  1465.      */
  1466.     @Override
  1467.     public CachingRisposta getFruizioneCachingRisposta(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1468.         IContext context = this.getContext();
  1469.         try {
  1470.             context.getLogger().info("Invocazione in corso ...");    

  1471.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1472.             context.getLogger().debug("Autorizzazione completata con successo");    
  1473.                        
  1474.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1475.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);

  1476.             CachingRisposta ret = ErogazioniApiHelper.buildCachingRisposta(pd.getResponseCaching());
  1477.             context.getLogger().info("Invocazione completata con successo");
  1478.             return ret;
  1479.      
  1480.         }
  1481.         catch(javax.ws.rs.WebApplicationException e) {
  1482.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1483.             throw e;
  1484.         }
  1485.         catch(Throwable e) {
  1486.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1487.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1488.         }
  1489.     }
  1490.    
  1491.     /**
  1492.      * Restituisce il canale associato alla fruizione
  1493.      *
  1494.      * Questa operazione consente di ottenere il canale associato alla fruizione
  1495.      *
  1496.      */
  1497.     @Override
  1498.     public ApiCanale getFruizioneCanale(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  1499.         IContext context = this.getContext();
  1500.         try {
  1501.             context.getLogger().info("Invocazione in corso ...");    

  1502.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1503.             context.getLogger().debug("Autorizzazione completata con successo");    
  1504.                        
  1505.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  1506.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  1507.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(
  1508.                     () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  1509.                     "Fruizione"
  1510.                 );
  1511.            
  1512.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  1513.             final IDPortaDelegata idPd =  ErogazioniApiHelper.getIDGruppoPDDefault(env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  1514.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  1515.            
  1516.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  1517.             ApiCanale canale = ErogazioniApiHelper.toApiCanale(env, pd, apc, true);
  1518.            
  1519.             context.getLogger().info("Invocazione completata con successo");
  1520.             return canale;
  1521.      
  1522.         }
  1523.         catch(javax.ws.rs.WebApplicationException e) {
  1524.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1525.             throw e;
  1526.         }
  1527.         catch(Throwable e) {
  1528.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1529.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1530.         }
  1531.     }
  1532.  
  1533.     /**
  1534.      * Restituisce la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  1535.      *
  1536.      * Questa operazione consente di ottenere la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  1537.      *
  1538.      */
  1539.     @Override
  1540.     public ControlloAccessiAutenticazione getFruizioneControlloAccessiAutenticazione(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1541.         IContext context = this.getContext();
  1542.         try {
  1543.             context.getLogger().info("Invocazione in corso ...");    

  1544.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1545.             context.getLogger().debug("Autorizzazione completata con successo");
  1546.            
  1547.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1548.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1549.        
  1550.             OneOfControlloAccessiAutenticazioneAutenticazione autRet = null;
  1551.             TipoAutenticazioneEnum tipoAutenticazione = null;
  1552.             if ( TipoAutenticazione.toEnumConstant(pd.getAutenticazione()) == null ) {
  1553.                 tipoAutenticazione = TipoAutenticazioneEnum.CUSTOM;
  1554.             }
  1555.             else {      
  1556.                 tipoAutenticazione = Enums.dualizeMap(Enums.tipoAutenticazioneFromRest).get(TipoAutenticazione.toEnumConstant(pd.getAutenticazione())) ;
  1557.             }
  1558.                        
  1559.             ControlloAccessiAutenticazioneToken token = BaseHelper.evalnull( () -> pd.getGestioneToken().getAutenticazione() ) != null
  1560.                     ? ErogazioniApiHelper.fromGestioneTokenAutenticazione(pd.getGestioneToken().getAutenticazione())
  1561.                     : null;
  1562.            
  1563.             switch(tipoAutenticazione) {
  1564.             case HTTP_BASIC: {
  1565.                 APIImplAutenticazioneBasic authnBasic = new APIImplAutenticazioneBasic();
  1566.                 authnBasic.setTipo(tipoAutenticazione);
  1567.                 authnBasic.setOpzionale(Helper.statoFunzionalitaConfToBool( pd.getAutenticazioneOpzionale() ));
  1568.                 autRet = authnBasic;
  1569.                
  1570.                 Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazioneBasic.CLEAN_HEADER_AUTHORIZATION.equals(p.getNome())).findAny();
  1571.                 if (prop.isPresent() && prop.get().getValore().equals(ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_TRUE))
  1572.                     authnBasic.setForward(false);
  1573.                 else
  1574.                     authnBasic.setForward(true);
  1575.                
  1576.                 break;
  1577.             }
  1578.             case HTTPS: {
  1579.                 APIImplAutenticazioneHttps authnHttps = new APIImplAutenticazioneHttps();
  1580.                 authnHttps.setTipo(tipoAutenticazione);
  1581.                 authnHttps.setOpzionale(Helper.statoFunzionalitaConfToBool( pd.getAutenticazioneOpzionale() ));
  1582.                 autRet = authnHttps;
  1583.                
  1584.                 break;
  1585.             }
  1586.             case PRINCIPAL: {
  1587.            
  1588.                 APIImplAutenticazionePrincipal authnPrincipal = new APIImplAutenticazionePrincipal();
  1589.                 authnPrincipal.setTipo(tipoAutenticazione);
  1590.                 authnPrincipal.setOpzionale(Helper.statoFunzionalitaConfToBool( pd.getAutenticazioneOpzionale() ));
  1591.                 autRet = authnPrincipal;
  1592.                
  1593.                 TipoAutenticazionePrincipal tipoAuthnPrincipal = pd.getProprietaAutenticazioneList()
  1594.                         .stream()
  1595.                         .filter( p -> ParametriAutenticazionePrincipal.TIPO_AUTENTICAZIONE.equals(p.getNome()))
  1596.                         .map( p -> TipoAutenticazionePrincipal.toEnumConstant(p.getValore()) )
  1597.                         .findAny()
  1598.                         .orElse(TipoAutenticazionePrincipal.CONTAINER);
  1599.                 authnPrincipal.setTipoPrincipal(Enums.dualizeMap(Enums.tipoAutenticazionePrincipalFromRest).get(tipoAuthnPrincipal));
  1600.                
  1601.                 switch (authnPrincipal.getTipoPrincipal()) {
  1602.                 case CONTAINER:
  1603.                 case IP_ADDRESS:
  1604.                 case IP_ADDRESS_FORWARDED_FOR:
  1605.                     break;
  1606.                 case HEADER_BASED: {
  1607.                     Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  1608.                     if (prop.isPresent()) authnPrincipal.setNome(prop.get().getValore());                  
  1609.                     break;
  1610.                 }
  1611.                 case FORM_BASED: {
  1612.                     Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  1613.                     if (prop.isPresent()) authnPrincipal.setNome(prop.get().getValore());                  
  1614.                     break;
  1615.                 }
  1616.                 case URL_BASED: {
  1617.                     Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.PATTERN.equals(p.getNome())).findAny();
  1618.                     if (prop.isPresent()) authnPrincipal.setPattern(prop.get().getValore());
  1619.                     break;
  1620.                 }
  1621.                 case TOKEN: {
  1622.                     Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.TOKEN_CLAIM.equals(p.getNome())).findAny();
  1623.                     if (prop.isPresent()) {
  1624.                         if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_SUBJECT.equals(prop.get().getValore())) {
  1625.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.SUBJECT);
  1626.                         }
  1627.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CLIENT_ID.equals(prop.get().getValore())) {
  1628.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.CLIENTID);
  1629.                         }
  1630.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_USERNAME.equals(prop.get().getValore())) {
  1631.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.USERNAME);
  1632.                         }
  1633.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_EMAIL.equals(prop.get().getValore())) {
  1634.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.EMAIL);
  1635.                         }
  1636.                         else if(ParametriAutenticazionePrincipal.TOKEN_CLAIM_CUSTOM.equals(prop.get().getValore())) {
  1637.                             authnPrincipal.setToken(TipoAutenticazionePrincipalToken.CUSTOM);
  1638.                            
  1639.                             Optional<Proprieta> propName = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.NOME.equals(p.getNome())).findAny();
  1640.                             if (propName.isPresent()) authnPrincipal.setNome(propName.get().getValore());
  1641.                         }
  1642.                     }
  1643.                     break;
  1644.                 }
  1645.                 }   // switch config.getTipo
  1646.                
  1647.                 // IsForward
  1648.                 Optional<Proprieta> prop = pd.getProprietaAutenticazioneList().stream().filter( p -> ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL.equals(p.getNome())).findAny();
  1649.                 if (prop.isPresent() && ParametriAutenticazionePrincipal.CLEAN_PRINCIPAL_TRUE.equals(prop.get().getValore()))
  1650.                     authnPrincipal.setForward(false);
  1651.                 else
  1652.                     authnPrincipal.setForward(true);
  1653.                
  1654.                 break;
  1655.             }  // case principal
  1656.            
  1657.             case API_KEY: {
  1658.                
  1659.                 APIImplAutenticazioneApiKey authnApiKey = new APIImplAutenticazioneApiKey();
  1660.                 authnApiKey.setTipo(tipoAutenticazione);
  1661.                 authnApiKey.setOpzionale(Helper.statoFunzionalitaConfToBool( pd.getAutenticazioneOpzionale() ));
  1662.                 autRet = authnApiKey;
  1663.            
  1664.                 if(pd.getProprietaAutenticazioneList()!=null && pd.sizeProprietaAutenticazioneList()>0) {
  1665.                    
  1666.                     APIImplAutenticazioneApiKeyPosizione posizione = null;
  1667.                     APIImplAutenticazioneApiKeyConfig apiKeyNomi = null;
  1668.                     APIImplAutenticazioneApiKeyConfig appIdNomi = null;
  1669.                     boolean useOasNames = false;
  1670.                    
  1671.                     for (Proprieta proprieta : pd.getProprietaAutenticazioneList()) {
  1672.                         String nomeP = proprieta.getNome();
  1673.                         String valoreP = proprieta.getValore();
  1674.                         if(ParametriAutenticazioneApiKey.APP_ID.equals(nomeP)) {
  1675.                             authnApiKey.setAppId(ParametriAutenticazioneApiKey.APP_ID_TRUE.equals(valoreP));
  1676.                         }
  1677.                         else if(ParametriAutenticazioneApiKey.QUERY_PARAMETER.equals(nomeP)) {
  1678.                             if(posizione==null) {
  1679.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  1680.                             }
  1681.                             posizione.setQueryParameter(ParametriAutenticazioneApiKey.QUERY_PARAMETER_TRUE.equals(valoreP));
  1682.                         }
  1683.                         else if(ParametriAutenticazioneApiKey.HEADER.equals(nomeP)) {
  1684.                             if(posizione==null) {
  1685.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  1686.                             }
  1687.                             posizione.setHeader(ParametriAutenticazioneApiKey.HEADER_TRUE.equals(valoreP));
  1688.                         }
  1689.                         else if(ParametriAutenticazioneApiKey.COOKIE.equals(nomeP)) {
  1690.                             if(posizione==null) {
  1691.                                 posizione = new APIImplAutenticazioneApiKeyPosizione();
  1692.                             }
  1693.                             posizione.setCookie(ParametriAutenticazioneApiKey.COOKIE_TRUE.equals(valoreP));
  1694.                         }
  1695.                         else if(ParametriAutenticazioneApiKey.USE_OAS3_NAMES.equals(nomeP)) {
  1696.                             useOasNames = ParametriAutenticazioneApiKey.USE_OAS3_NAMES_TRUE.equals(valoreP);
  1697.                         }  
  1698.                         else if(ParametriAutenticazioneApiKey.CLEAN_API_KEY.equals(nomeP)) {
  1699.                             boolean clean = ParametriAutenticazioneApiKey.CLEAN_API_KEY_TRUE.equals(valoreP);
  1700.                             authnApiKey.setApiKeyForward(!clean);
  1701.                         }
  1702.                         else if(ParametriAutenticazioneApiKey.CLEAN_APP_ID.equals(nomeP)) {
  1703.                             boolean clean = ParametriAutenticazioneApiKey.CLEAN_APP_ID_TRUE.equals(valoreP);
  1704.                             authnApiKey.setAppIdForward(!clean);
  1705.                         }
  1706.                     }
  1707.                    
  1708.                     if(!useOasNames) {
  1709.                         for (Proprieta proprieta : pd.getProprietaAutenticazioneList()) {
  1710.                             String nomeP = proprieta.getNome();
  1711.                             String valoreP = proprieta.getValore();
  1712.                             if(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_API_KEY.equals(nomeP)) {
  1713.                                 if(apiKeyNomi==null) {
  1714.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  1715.                                 }
  1716.                                 apiKeyNomi.setQueryParameter(valoreP);
  1717.                             }
  1718.                             else if(ParametriAutenticazioneApiKey.NOME_HEADER_API_KEY.equals(nomeP)) {
  1719.                                 if(apiKeyNomi==null) {
  1720.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  1721.                                 }
  1722.                                 apiKeyNomi.setHeader(valoreP);
  1723.                             }
  1724.                             else if(ParametriAutenticazioneApiKey.NOME_COOKIE_API_KEY.equals(nomeP)) {
  1725.                                 if(apiKeyNomi==null) {
  1726.                                     apiKeyNomi = new APIImplAutenticazioneApiKeyConfig();
  1727.                                 }
  1728.                                 apiKeyNomi.setCookie(valoreP);
  1729.                             }
  1730.                             else if(ParametriAutenticazioneApiKey.NOME_QUERY_PARAMETER_APP_ID.equals(nomeP)) {
  1731.                                 if(appIdNomi==null) {
  1732.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  1733.                                 }
  1734.                                 appIdNomi.setQueryParameter(valoreP);
  1735.                             }
  1736.                             else if(ParametriAutenticazioneApiKey.NOME_HEADER_APP_ID.equals(nomeP)) {
  1737.                                 if(appIdNomi==null) {
  1738.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  1739.                                 }
  1740.                                 appIdNomi.setHeader(valoreP);
  1741.                             }
  1742.                             else if(ParametriAutenticazioneApiKey.NOME_COOKIE_APP_ID.equals(nomeP)) {
  1743.                                 if(appIdNomi==null) {
  1744.                                     appIdNomi = new APIImplAutenticazioneApiKeyConfig();
  1745.                                 }
  1746.                                 appIdNomi.setCookie(valoreP);
  1747.                             }
  1748.                         }
  1749.                     }
  1750.                    
  1751.                     authnApiKey.setPosizione(posizione);
  1752.                     authnApiKey.setApiKeyNomi(apiKeyNomi);
  1753.                     authnApiKey.setAppIdNomi(appIdNomi);
  1754.                 }
  1755.                
  1756.                 break;
  1757.             }  // case api-key
  1758.            
  1759.             case CUSTOM: {
  1760.                 APIImplAutenticazioneCustom authnCustom = new APIImplAutenticazioneCustom();
  1761.                 authnCustom.setTipo(tipoAutenticazione);
  1762.                 authnCustom.setOpzionale(Helper.statoFunzionalitaConfToBool( pd.getAutenticazioneOpzionale() ));
  1763.                 autRet = authnCustom;
  1764.                
  1765.                 authnCustom.setNome(pd.getAutenticazione());
  1766.                
  1767.                 break;
  1768.             }
  1769.             default:
  1770.                 break;
  1771.             }  // switch autRet.getTipo
  1772.                    
  1773.             ControlloAccessiAutenticazione ret = new ControlloAccessiAutenticazione();
  1774.             ret.setAutenticazione(autRet);
  1775.             ret.setToken(token);
  1776.                                
  1777.             context.getLogger().info("Invocazione completata con successo");
  1778.             return ret;
  1779.      
  1780.         }
  1781.         catch(javax.ws.rs.WebApplicationException e) {
  1782.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1783.             throw e;
  1784.         }
  1785.         catch(Throwable e) {
  1786.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1787.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1788.         }
  1789.     }
  1790.    
  1791.     /**
  1792.      * Restituisce la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  1793.      *
  1794.      * Questa operazione consente di ottenere la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  1795.      *
  1796.      */
  1797.     @Override
  1798.     public ControlloAccessiAutorizzazioneView getFruizioneControlloAccessiAutorizzazione(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1799.         IContext context = this.getContext();
  1800.         try {
  1801.             context.getLogger().info("Invocazione in corso ...");    

  1802.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1803.             context.getLogger().debug("Autorizzazione completata con successo");    
  1804.                        
  1805.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1806.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1807.            
  1808.             ControlloAccessiAutorizzazioneView ret = ErogazioniApiHelper.controlloAccessiAutorizzazioneFromPD(pd);
  1809.            
  1810.             context.getLogger().info("Invocazione completata con successo");        
  1811.             return ret;
  1812.      
  1813.         }
  1814.         catch(javax.ws.rs.WebApplicationException e) {
  1815.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1816.             throw e;
  1817.         }
  1818.         catch(Throwable e) {
  1819.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1820.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1821.         }
  1822.     }
  1823.    
  1824.     /**
  1825.      * Restituisce l'elenco degli applicativi autorizzati
  1826.      *
  1827.      * Questa operazione consente di ottenere l'elenco degli applicativi autorizzati
  1828.      *
  1829.      */
  1830.     @Override
  1831.     public ControlloAccessiAutorizzazioneApplicativi getFruizioneControlloAccessiAutorizzazioneApplicativi(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1832.         IContext context = this.getContext();
  1833.         try {
  1834.             context.getLogger().info("Invocazione in corso ...");    

  1835.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1836.             context.getLogger().debug("Autorizzazione completata con successo");
  1837.            
  1838.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1839.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1840.             ControlloAccessiAutorizzazioneApplicativi ret = new ControlloAccessiAutorizzazioneApplicativi();
  1841.            
  1842.             int idLista = Liste.PORTE_DELEGATE_SERVIZIO_APPLICATIVO;
  1843.             ConsoleSearch ricerca = Helper.setupRicercaPaginata("", -1, 0, idLista);
  1844.             List<ServizioApplicativo> lista = env.pdCore.porteDelegateServizioApplicativoList(pd.getId(), ricerca);
  1845.             ret.setApplicativi(lista.stream().map( saPA -> saPA.getNome()).collect(Collectors.toList()));
  1846.        
  1847.             context.getLogger().info("Invocazione completata con successo");
  1848.             return ret;
  1849.         }
  1850.         catch(javax.ws.rs.WebApplicationException e) {
  1851.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1852.             throw e;
  1853.         }
  1854.         catch(Throwable e) {
  1855.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1856.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1857.         }
  1858.     }
  1859.    
  1860.     /**
  1861.      * Restituisce l'elenco degli applicativi token autorizzati
  1862.      *
  1863.      * Questa operazione consente di ottenere l'elenco degli applicativi token autorizzati
  1864.      *
  1865.      */
  1866.     @Override
  1867.     public ControlloAccessiAutorizzazioneApplicativi getFruizioneControlloAccessiAutorizzazioneApplicativiToken(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1868.         IContext context = this.getContext();
  1869.         try {
  1870.             context.getLogger().info("Invocazione in corso ...");    

  1871.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1872.             context.getLogger().debug("Autorizzazione completata con successo");    
  1873.                        
  1874.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1875.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1876.             ControlloAccessiAutorizzazioneApplicativi ret = new ControlloAccessiAutorizzazioneApplicativi();
  1877.            
  1878.             int idLista = Liste.PORTE_DELEGATE_TOKEN_SERVIZIO_APPLICATIVO;
  1879.             ConsoleSearch ricerca = Helper.setupRicercaPaginata("", -1, 0, idLista);
  1880.             List<ServizioApplicativo> lista = env.pdCore.porteDelegateServizioApplicativoTokenList(pd.getId(), ricerca);
  1881.             ret.setApplicativi(lista.stream().map( saPA -> saPA.getNome()).collect(Collectors.toList()));
  1882.        
  1883.             context.getLogger().info("Invocazione completata con successo");
  1884.             return ret;
  1885.         }
  1886.         catch(javax.ws.rs.WebApplicationException e) {
  1887.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1888.             throw e;
  1889.         }
  1890.         catch(Throwable e) {
  1891.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1892.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1893.         }
  1894.     }

  1895.     /**
  1896.      * Restituisce l'elenco dei ruoli autorizzati
  1897.      *
  1898.      * Questa operazione consente di ottenere l'elenco dei ruoli autorizzati
  1899.      *
  1900.      */
  1901.     @Override
  1902.     public ControlloAccessiAutorizzazioneRuoli getFruizioneControlloAccessiAutorizzazioneRuoli(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1903.         IContext context = this.getContext();
  1904.         try {
  1905.             context.getLogger().info("Invocazione in corso ...");    

  1906.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1907.             context.getLogger().debug("Autorizzazione completata con successo");    
  1908.                        
  1909.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1910.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1911.             final ControlloAccessiAutorizzazioneRuoli ret = new ControlloAccessiAutorizzazioneRuoli();
  1912.            
  1913.             if(pd.getRuoli()!=null && pd.getRuoli().sizeRuoloList()>0) {
  1914.                 ret.setRuoli(BaseHelper.evalnull( () -> pd.getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList()) ));
  1915.             }
  1916.        
  1917.             context.getLogger().info("Invocazione completata con successo");
  1918.             return ret;
  1919.          
  1920.         }
  1921.         catch(javax.ws.rs.WebApplicationException e) {
  1922.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1923.             throw e;
  1924.         }
  1925.         catch(Throwable e) {
  1926.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1927.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1928.         }
  1929.     }
  1930.    
  1931.     /**
  1932.      * Restituisce l'elenco dei ruoli token autorizzati
  1933.      *
  1934.      * Questa operazione consente di ottenere l'elenco dei ruoli token autorizzati
  1935.      *
  1936.      */
  1937.     @Override
  1938.     public ControlloAccessiAutorizzazioneRuoli getFruizioneControlloAccessiAutorizzazioneRuoliToken(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1939.         IContext context = this.getContext();
  1940.         try {
  1941.             context.getLogger().info("Invocazione in corso ...");    

  1942.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1943.             context.getLogger().debug("Autorizzazione completata con successo");    
  1944.                        
  1945.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1946.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1947.             final ControlloAccessiAutorizzazioneRuoli ret = new ControlloAccessiAutorizzazioneRuoli();
  1948.            
  1949.             if(pd.getAutorizzazioneToken()!=null && pd.getAutorizzazioneToken().getRuoli()!=null && pd.getAutorizzazioneToken().getRuoli().sizeRuoloList()>0) {
  1950.                 ret.setRuoli(BaseHelper.evalnull( () -> pd.getAutorizzazioneToken().getRuoli().getRuoloList().stream().map(Ruolo::getNome).collect(Collectors.toList()) ));
  1951.             }
  1952.        
  1953.             context.getLogger().info("Invocazione completata con successo");
  1954.             return ret;
  1955.         }
  1956.         catch(javax.ws.rs.WebApplicationException e) {
  1957.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1958.             throw e;
  1959.         }
  1960.         catch(Throwable e) {
  1961.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1962.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1963.         }
  1964.     }

  1965.     /**
  1966.      * Restituisce l'elenco degli scope autorizzati
  1967.      *
  1968.      * Questa operazione consente di ottenere l'elenco degli scope autorizzati
  1969.      *
  1970.      */
  1971.     @Override
  1972.     public ControlloAccessiAutorizzazioneScopes getFruizioneControlloAccessiAutorizzazioneScope(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  1973.         IContext context = this.getContext();
  1974.         try {
  1975.             context.getLogger().info("Invocazione in corso ...");    

  1976.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1977.             context.getLogger().debug("Autorizzazione completata con successo");  
  1978.            
  1979.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  1980.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  1981.             final ControlloAccessiAutorizzazioneScopes ret = new ControlloAccessiAutorizzazioneScopes();

  1982.             ret.setScope(BaseHelper.evalnull( () -> pd.getScope().getScopeList().stream().map(Scope::getNome).collect(Collectors.toList()) ));
  1983.            
  1984.             context.getLogger().info("Invocazione completata con successo");
  1985.             return ret;
  1986.      
  1987.         }
  1988.         catch(javax.ws.rs.WebApplicationException e) {
  1989.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  1990.             throw e;
  1991.         }
  1992.         catch(Throwable e) {
  1993.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  1994.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1995.         }
  1996.     }
  1997.    
  1998.    /**
  1999.      * Restituisce le proprietĆ  di configurazione attivate
  2000.      *
  2001.      * Questa operazione consente di ottenere le proprietĆ  di configurazione
  2002.      *
  2003.      */
  2004.     @Override
  2005.     public ElencoProprieta getFruizioneElencoProprieta(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2006.         IContext context = this.getContext();
  2007.         try {
  2008.             context.getLogger().info("Invocazione in corso ...");    

  2009.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2010.             context.getLogger().debug("Autorizzazione completata con successo");    
  2011.                        
  2012.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2013.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2014.        
  2015.             ElencoProprieta ret = new ElencoProprieta();
  2016.             ret.setProprieta(new ArrayList<>());
  2017.             if(pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  2018.                 for (Proprieta p: pd.getProprietaList()) {
  2019.                     org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura retP = new org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura();
  2020.                     retP.setNome(p.getNome());
  2021.                     retP.setValore(p.getValore());
  2022.                     retP.setEncrypted(BYOKUtilities.isWrappedValue(p.getValore()));
  2023.                     ret.addProprietaItem(retP);
  2024.                 }
  2025.             }
  2026.            
  2027.             context.getLogger().info("Invocazione completata con successo");
  2028.             return ret;        
  2029.      
  2030.         }
  2031.         catch(javax.ws.rs.WebApplicationException e) {
  2032.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2033.             throw e;
  2034.         }
  2035.         catch(Throwable e) {
  2036.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2037.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2038.         }
  2039.     }

  2040.     /**
  2041.      * Restituisce la configurazione relativa all'identificazione degli attributi per quanto concerne il controllo degli accessi
  2042.      *
  2043.      * Questa operazione consente di ottenere la configurazione relativa all'identificazione degli attributi
  2044.      *
  2045.      */
  2046.     @Override
  2047.     public ControlloAccessiIdentificazioneAttributi getFruizioneControlloAccessiIdentificazioneAttributi(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2048.         IContext context = this.getContext();
  2049.         try {
  2050.             context.getLogger().info("Invocazione in corso ...");    

  2051.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2052.             context.getLogger().debug("Autorizzazione completata con successo");    
  2053.                        
  2054.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2055.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2056.        
  2057.             final ControlloAccessiIdentificazioneAttributi ret = new ControlloAccessiIdentificazioneAttributi();
  2058.             if(pd.sizeAttributeAuthorityList()>0) {
  2059.                 ret.setAbilitato(true);
  2060.                 ret.setAttributeAuthority(new ArrayList<>());
  2061.                 for (AttributeAuthority aa : pd.getAttributeAuthorityList()) {
  2062.                     ControlloAccessiAttributeAuthority attributeAuthorityItem = new ControlloAccessiAttributeAuthority();
  2063.                     attributeAuthorityItem.setNome(aa.getNome());
  2064.                     if(aa.sizeAttributoList()>0) {
  2065.                         attributeAuthorityItem.setAttributi(new ArrayList<>());
  2066.                         for (String attributeName : aa.getAttributoList()) {
  2067.                             attributeAuthorityItem.addAttributiItem(attributeName);
  2068.                         }
  2069.                     }
  2070.                     ret.addAttributeAuthorityItem(attributeAuthorityItem);
  2071.                 }
  2072.             }
  2073.             else {
  2074.                 ret.setAbilitato(false);
  2075.             }

  2076.             context.getLogger().info("Invocazione completata con successo");
  2077.             return ret;
  2078.         }
  2079.         catch(javax.ws.rs.WebApplicationException e) {
  2080.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2081.             throw e;
  2082.         }
  2083.         catch(Throwable e) {
  2084.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2085.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2086.         }
  2087.     }

  2088.    /**
  2089.      * Restituisce il dettaglio di una proprietĆ  di configurazione
  2090.      *
  2091.      * Questa operazione consente di ottenere il dettaglio di una proprietĆ  di configurazione
  2092.      *
  2093.      */
  2094.     @Override
  2095.     public org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura getFruizioneProprieta(String erogatore, String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2096.         IContext context = this.getContext();
  2097.         try {
  2098.             context.getLogger().info("Invocazione in corso ...");    

  2099.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2100.             context.getLogger().debug("Autorizzazione completata con successo");    
  2101.                        
  2102.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2103.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2104.        
  2105.             Proprieta toGet = null;
  2106.             if(pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  2107.                 Optional<Proprieta> op = BaseHelper.findFirst(pd.getProprietaList(), p -> p.getNome().equals(proprieta));
  2108.                 if(op.isPresent()) {
  2109.                     toGet = op.get();
  2110.                 }
  2111.             }
  2112.            
  2113.             org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura ret = null;
  2114.             if(toGet!=null) {
  2115.                 ret = new org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura();
  2116.                 ret.setNome(toGet.getNome());
  2117.                 ret.setValore(toGet.getValore());
  2118.                 ret.setEncrypted(BYOKUtilities.isWrappedValue(toGet.getValore()));
  2119.             }
  2120.             else {
  2121.                 throw FaultCode.NOT_FOUND.toException("Nessuna proprietĆ  ĆØ presente nella configurazione con nome '"+proprieta+"'");
  2122.             }
  2123.            
  2124.             context.getLogger().info("Invocazione completata con successo");
  2125.             return ret;
  2126.      
  2127.         }
  2128.         catch(javax.ws.rs.WebApplicationException e) {
  2129.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2130.             throw e;
  2131.         }
  2132.         catch(Throwable e) {
  2133.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2134.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2135.         }
  2136.     }

  2137.     /**
  2138.      * Restituisce la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  2139.      *
  2140.      * Questa operazione consente di ottenere la configurazione relativa alla gestione dei token
  2141.      *
  2142.      */
  2143.     @Override
  2144.     public ControlloAccessiGestioneToken getFruizioneControlloAccessiGestioneToken(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2145.         IContext context = this.getContext();
  2146.         try {
  2147.             context.getLogger().info("Invocazione in corso ...");    

  2148.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2149.             context.getLogger().debug("Autorizzazione completata con successo");
  2150.                
  2151.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2152.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2153.                        
  2154.             final ControlloAccessiGestioneToken ret = new ControlloAccessiGestioneToken();
  2155.             final GestioneToken paToken = pd.getGestioneToken();
  2156.            
  2157.             ret.setAbilitato(paToken != null);
  2158.             if (paToken != null) {
  2159.                 ret.setIntrospection(StatoFunzionalitaConWarningEnum.fromValue(paToken.getIntrospection().getValue() ));
  2160.                 ret.setPolicy(paToken.getPolicy());
  2161.                 ret.setTokenForward( Helper.statoFunzionalitaConfToBool( paToken.getForward() ));
  2162.                 ret.setTokenOpzionale( Helper.statoFunzionalitaConfToBool(paToken.getTokenOpzionale() ));
  2163.                 ret.setUserInfo(StatoFunzionalitaConWarningEnum.fromValue( paToken.getUserInfo().getValue() ));
  2164.                 ret.setValidazioneJwt(StatoFunzionalitaConWarningEnum.fromValue( paToken.getValidazione().getValue() ));
  2165.             }
  2166.        
  2167.             context.getLogger().info("Invocazione completata con successo");
  2168.             return ret;
  2169.      
  2170.         }
  2171.         catch(javax.ws.rs.WebApplicationException e) {
  2172.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2173.             throw e;
  2174.         }
  2175.         catch(Throwable e) {
  2176.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2177.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2178.         }
  2179.     }
  2180.    
  2181.     /**
  2182.      * Restituisce le informazioni sulla configurazione CORS associata alla fruizione
  2183.      *
  2184.      * Questa operazione consente di ottenere le informazioni sulla configurazione CORS associata alla fruizione identificata dall'erogatore, dal nome e dalla versione
  2185.      *
  2186.      */
  2187.     @Override
  2188.     public GestioneCors getFruizioneGestioneCORS(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  2189.         IContext context = this.getContext();
  2190.         try {
  2191.             context.getLogger().info("Invocazione in corso ...");    

  2192.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2193.             context.getLogger().debug("Autorizzazione completata con successo");    
  2194.                        
  2195.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2196.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  2197.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(
  2198.                     () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  2199.                     "Fruizione"
  2200.                 );
  2201.            
  2202.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2203.             final IDPortaDelegata idPd =  ErogazioniApiHelper.getIDGruppoPDDefault(env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  2204.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  2205.            
  2206.             final CorsConfigurazione pdConf = pd.getGestioneCors();        
  2207.            
  2208.             final GestioneCors ret = ErogazioniApiHelper.convert(pdConf);
  2209.            
  2210.            
  2211.             context.getLogger().info("Invocazione completata con successo");
  2212.             return ret;
  2213.      
  2214.         }
  2215.         catch(javax.ws.rs.WebApplicationException e) {
  2216.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2217.             throw e;
  2218.         }
  2219.         catch(Throwable e) {
  2220.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2221.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2222.         }
  2223.     }
  2224.    
  2225.     /**
  2226.      * Restituisce il dettaglio di una policy di rate limiting
  2227.      *
  2228.      * Questa operazione consente di ottenere il dettaglio di una policy di rate limiting
  2229.      *
  2230.      */
  2231.     @Override
  2232.     public RateLimitingPolicyFruizioneView getFruizioneRateLimitingPolicy(String erogatore, String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2233.         IContext context = this.getContext();
  2234.         try {
  2235.             context.getLogger().info("Invocazione in corso ...");    

  2236.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2237.             context.getLogger().debug("Autorizzazione completata con successo");    
  2238.                        
  2239.            
  2240.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2241.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2242.            
  2243.             AttivazionePolicy policy = BaseHelper.supplyOrNotFound(
  2244.                     () -> env.confCore.getAttivazionePolicy(idPolicy, RuoloPolicy.DELEGATA, pd.getNome()),
  2245.                     "Rate Limiting Policy con nome " + idPolicy
  2246.                 );
  2247.             if ( policy == null )
  2248.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con nome " + idPolicy );
  2249.            
  2250.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  2251.             RateLimitingPolicyFruizioneView ret = ErogazioniApiHelper.convert( policy, infoPolicy, new RateLimitingPolicyFruizioneView() );
  2252.    
  2253.             context.getLogger().info("Invocazione completata con successo");
  2254.             return ret;
  2255.      
  2256.         }
  2257.         catch(javax.ws.rs.WebApplicationException e) {
  2258.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2259.             throw e;
  2260.         }
  2261.         catch(Throwable e) {
  2262.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2263.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2264.         }
  2265.     }

  2266.     /**
  2267.      * Restituisce la configurazione relativa alla registrazione dei diagnostici
  2268.      *
  2269.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione dei diagnostici
  2270.      *
  2271.      */
  2272.     @Override
  2273.     public RegistrazioneDiagnosticiConfigurazione getFruizioneRegistrazioneDiagnostici(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2274.         IContext context = this.getContext();
  2275.         try {
  2276.             context.getLogger().info("Invocazione in corso ...");    

  2277.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2278.             context.getLogger().debug("Autorizzazione completata con successo");    
  2279.                        
  2280.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2281.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2282.             final RegistrazioneDiagnosticiConfigurazione ret = ErogazioniApiHelper.fromDiagnosticiConfigurazione(pd.getTracciamento());
  2283.            
  2284.             context.getLogger().info("Invocazione completata con successo");
  2285.             return ret;
  2286.      
  2287.         }
  2288.         catch(javax.ws.rs.WebApplicationException e) {
  2289.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2290.             throw e;
  2291.         }
  2292.         catch(Throwable e) {
  2293.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2294.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2295.         }
  2296.     }    

  2297.     /**
  2298.      * Restituisce la configurazione relativa alla registrazione dei messaggi
  2299.      *
  2300.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione dei messaggi
  2301.      *
  2302.      */
  2303.     @Override
  2304.     public RegistrazioneMessaggi getFruizioneRegistrazioneMessaggi(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2305.         IContext context = this.getContext();
  2306.         try {
  2307.             context.getLogger().info("Invocazione in corso ...");    

  2308.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2309.             context.getLogger().debug("Autorizzazione completata con successo");    
  2310.                        
  2311.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2312.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2313.             final RegistrazioneMessaggi ret = ErogazioniApiHelper.fromDumpConfigurazione(pd.getDump());
  2314.            
  2315.             context.getLogger().info("Invocazione completata con successo");
  2316.             return ret;    
  2317.         }
  2318.         catch(javax.ws.rs.WebApplicationException e) {
  2319.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2320.             throw e;
  2321.         }
  2322.         catch(Throwable e) {
  2323.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2324.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2325.         }
  2326.     }
  2327.    
  2328.     /**
  2329.      * Restituisce la configurazione relativa alla registrazione delle transazioni
  2330.      *
  2331.      * Questa operazione consente di ottenere la configurazione relativa alla registrazione delle transazioni
  2332.      *
  2333.      */
  2334.     @Override
  2335.     public RegistrazioneTransazioniConfigurazione getFruizioneRegistrazioneTransazioni(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2336.         IContext context = this.getContext();
  2337.         try {
  2338.             context.getLogger().info("Invocazione in corso ...");    

  2339.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2340.             context.getLogger().debug("Autorizzazione completata con successo");    
  2341.            
  2342.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2343.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2344.             final RegistrazioneTransazioniConfigurazione ret = ErogazioniApiHelper.fromTransazioniConfigurazione(pd.getTracciamento(), env);
  2345.        
  2346.             context.getLogger().info("Invocazione completata con successo");
  2347.             return ret;
  2348.      
  2349.         }
  2350.         catch(javax.ws.rs.WebApplicationException e) {
  2351.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2352.             throw e;
  2353.         }
  2354.         catch(Throwable e) {
  2355.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2356.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2357.         }
  2358.     }

  2359.     /**
  2360.      * Restituisce l'indicazione sullo stato del gruppo
  2361.      *
  2362.      * Questa operazione consente di ottenere lo stato attuale del gruppo
  2363.      *
  2364.      */
  2365.     @Override
  2366.     public ApiImplStato getFruizioneStato(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2367.         IContext context = this.getContext();
  2368.         try {
  2369.             context.getLogger().info("Invocazione in corso ...");    

  2370.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2371.             context.getLogger().debug("Autorizzazione completata con successo");    
  2372.                        
  2373.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2374.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2375.            
  2376.             final ApiImplStato ret = new ApiImplStato();
  2377.             ret.setAbilitato(Helper.statoFunzionalitaConfToBool(pd.getStato()));
  2378.                        
  2379.        
  2380.             context.getLogger().info("Invocazione completata con successo");
  2381.             return ret;
  2382.         }
  2383.         catch(javax.ws.rs.WebApplicationException e) {
  2384.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2385.             throw e;
  2386.         }
  2387.         catch(Throwable e) {
  2388.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2389.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2390.         }
  2391.     }
  2392.    
  2393.     /**
  2394.      * Restituisce il dettaglio di una regola di correlazione applicativa per la richiesta
  2395.      *
  2396.      * Questa operazione consente di ottenere il dettaglio di una regola di correlazione applicativa per la richiesta
  2397.      *
  2398.      */
  2399.     @Override
  2400.     public CorrelazioneApplicativaRichiesta getFruizioneTracciamentoCorrelazioneApplicativaRichiesta(String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2401.         IContext context = this.getContext();
  2402.         try {
  2403.             context.getLogger().info("Invocazione in corso ...");    

  2404.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2405.             context.getLogger().debug("Autorizzazione completata con successo");
  2406.            
  2407.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2408.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2409.            
  2410.             final String searchElemento = elemento.equals("*")
  2411.                     ? ""
  2412.                     : elemento;        
  2413.             List<CorrelazioneApplicativaElemento> lista = BaseHelper.evalnull( () -> pd.getCorrelazioneApplicativa().getElementoList() );
  2414.            
  2415.             Optional<CorrelazioneApplicativaElemento> el = BaseHelper.findFirst( lista, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento) );
  2416.            
  2417.             if ( !el.isPresent() )
  2418.                 throw FaultCode.NOT_FOUND.toException("CorrelazioneApplicativaRichiesta per l'elemento " + elemento + " non presente");
  2419.            
  2420.             CorrelazioneApplicativaRichiesta ret = ErogazioniApiHelper.convert(el.get());
  2421.            
  2422.             context.getLogger().info("Invocazione completata con successo");
  2423.             return ret;
  2424.      
  2425.         }
  2426.         catch(javax.ws.rs.WebApplicationException e) {
  2427.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2428.             throw e;
  2429.         }
  2430.         catch(Throwable e) {
  2431.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2432.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2433.         }
  2434.     }
  2435.    
  2436.     /**
  2437.      * Restituisce il dettaglio di una regola di correlazione applicativa per la risposta
  2438.      *
  2439.      * Questa operazione consente di ottenere il dettaglio di una regola di correlazione applicativa per la risposta
  2440.      *
  2441.      */
  2442.     @Override
  2443.     public CorrelazioneApplicativaRisposta getFruizioneTracciamentoCorrelazioneApplicativaRisposta(String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2444.         IContext context = this.getContext();
  2445.         try {
  2446.             context.getLogger().info("Invocazione in corso ...");    

  2447.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2448.             context.getLogger().debug("Autorizzazione completata con successo");    
  2449.                        
  2450.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2451.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2452.            
  2453.             final String searchElemento = elemento.equals("*")
  2454.                     ? ""
  2455.                     : elemento;        
  2456.            
  2457.             List<CorrelazioneApplicativaRispostaElemento> lista = BaseHelper.evalnull( () -> pd.getCorrelazioneApplicativaRisposta().getElementoList() );
  2458.      
  2459.             Optional<CorrelazioneApplicativaRispostaElemento> el = BaseHelper.findFirst( lista, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento) );
  2460.            
  2461.             if ( !el.isPresent() )
  2462.                 throw FaultCode.NOT_FOUND.toException("CorrelazioneApplicativaRisposta per l'elemento " + elemento + " non presente");
  2463.            
  2464.             CorrelazioneApplicativaRisposta ret = ErogazioniApiHelper.convert(el.get());
  2465.            
  2466.             context.getLogger().info("Invocazione completata con successo");
  2467.             return ret;
  2468.      
  2469.         }
  2470.         catch(javax.ws.rs.WebApplicationException e) {
  2471.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2472.             throw e;
  2473.         }
  2474.         catch(Throwable e) {
  2475.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2476.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2477.         }
  2478.     }
  2479.    
  2480.     /**
  2481.      * Restituisce la configurazione relativa alla validazione dei contenuti applicativi
  2482.      *
  2483.      * Questa operazione consente di ottenere la configurazione relativa alla validazione dei contenuti applicativi
  2484.      *
  2485.      */
  2486.     @Override
  2487.     public Validazione getFruizioneValidazione(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2488.         IContext context = this.getContext();
  2489.         try {
  2490.             context.getLogger().info("Invocazione in corso ...");    

  2491.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2492.             context.getLogger().debug("Autorizzazione completata con successo");    
  2493.            
  2494.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2495.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2496.             final Validazione ret = ErogazioniApiHelper.fromValidazioneContenutiApplicativi(pd.getValidazioneContenutiApplicativi());
  2497.        
  2498.             context.getLogger().info("Invocazione completata con successo");
  2499.             return ret;
  2500.      
  2501.         }
  2502.         catch(javax.ws.rs.WebApplicationException e) {
  2503.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2504.             throw e;
  2505.         }
  2506.         catch(Throwable e) {
  2507.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2508.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2509.         }
  2510.     }

  2511.     /**
  2512.      * Consente di modificare la configurazione relativa al caching delle risposte
  2513.      *
  2514.      * Questa operazione consente di aggiornare la configurazione relativa al caching delle risposte
  2515.      *
  2516.      */
  2517.     @Override
  2518.     public void updateFruizioneCachingRisposta(CachingRisposta body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2519.         IContext context = this.getContext();
  2520.         try {
  2521.             context.getLogger().info("Invocazione in corso ...");    

  2522.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2523.             context.getLogger().debug("Autorizzazione completata con successo");
  2524.            
  2525.             BaseHelper.throwIfNull(body);
  2526.            
  2527.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2528.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2529.            
  2530.             if (!env.paHelper.checkDataConfigurazioneResponseCachingPorta(TipoOperazione.OTHER, true, body.getStato().toString())) {
  2531.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  2532.             }
  2533.            
  2534.             ResponseCachingConfigurazione newConfigurazione = ErogazioniApiHelper.buildResponseCachingConfigurazione(body, env.paHelper);
  2535.            
  2536.             pd.setResponseCaching(newConfigurazione);
  2537.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);            
  2538.            

  2539.             context.getLogger().info("Invocazione completata con successo");      
  2540.      
  2541.         }
  2542.         catch(javax.ws.rs.WebApplicationException e) {
  2543.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2544.             throw e;
  2545.         }
  2546.         catch(Throwable e) {
  2547.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2548.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2549.         }
  2550.     }
  2551.    
  2552.     /**
  2553.      * Consente di modificare il canale associato alla fruizione
  2554.      *
  2555.      * Questa operazione consente di aggiornare il canale associato alla fruizione
  2556.      *
  2557.      */
  2558.     @Override
  2559.     public void updateFruizioneCanale(ConfigurazioneApiCanale body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  2560.         IContext context = this.getContext();
  2561.         try {
  2562.             context.getLogger().info("Invocazione in corso ...");    

  2563.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2564.             context.getLogger().debug("Autorizzazione completata con successo");    
  2565.                        
  2566.             BaseHelper.throwIfNull(body);  
  2567.              
  2568.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2569.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  2570.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(
  2571.                     () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(),  env),
  2572.                     "Fruizione"
  2573.                 );
  2574.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2575.             final IDPortaDelegata idPd =  ErogazioniApiHelper.getIDGruppoPDDefault(env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  2576.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  2577.            
  2578.             if(ConfigurazioneCanaleEnum.RIDEFINITO.equals(body.getConfigurazione())){
  2579.                 if(body.getCanale()==null || "".equals(body.getCanale())) {
  2580.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un canale");
  2581.                 }
  2582.                 if(!env.canali.contains(body.getCanale())) {
  2583.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + body.getCanale() + "' non ĆØ presente nel registro");
  2584.                 }
  2585.                 pd.setCanale(body.getCanale());
  2586.             }
  2587.             else {
  2588.                 pd.setCanale(null);
  2589.             }
  2590.            
  2591.             env.paCore.performUpdateOperation(env.userLogin, false, pd);
  2592.            
  2593.             context.getLogger().info("Invocazione completata con successo");
  2594.      
  2595.         }
  2596.         catch(javax.ws.rs.WebApplicationException e) {
  2597.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2598.             throw e;
  2599.         }
  2600.         catch(Throwable e) {
  2601.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2602.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2603.         }
  2604.     }
  2605.    

  2606.     /**
  2607.      * Consente di modificare la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  2608.      *
  2609.      * Questa operazione consente di aggiornare la configurazione relativa all'autenticazione per quanto concerne il controllo degli accessi
  2610.      *
  2611.      */
  2612.     @Override
  2613.     public void updateFruizioneControlloAccessiAutenticazione(ControlloAccessiAutenticazione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2614.         IContext context = this.getContext();
  2615.         try {
  2616.             context.getLogger().info("Invocazione in corso ...");    

  2617.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2618.             context.getLogger().debug("Autorizzazione completata con successo");
  2619.            
  2620.             BaseHelper.throwIfNull(body);
  2621.                        
  2622.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2623.             final PortaDelegata oldPd = env.pdCore.getPortaDelegata(env.idPd);
  2624.             final PortaDelegata newPd = env.pdCore.getPortaDelegata(env.idPd);
  2625.            
  2626.             ErogazioniApiHelper.fillPortaDelegata(env, body, newPd);
  2627.            
  2628.             if (! ErogazioniApiHelper.controlloAccessiCheckPD(env, oldPd, newPd)) {
  2629.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  2630.             }
  2631.        
  2632.            
  2633.             env.pdCore.performUpdateOperation(env.userLogin, false, newPd);
  2634.            
  2635.             context.getLogger().info("Invocazione completata con successo");
  2636.        
  2637.      
  2638.         }
  2639.         catch(javax.ws.rs.WebApplicationException e) {
  2640.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2641.             throw e;
  2642.         }
  2643.         catch(Throwable e) {
  2644.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2645.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2646.         }
  2647.     }
  2648.    
  2649.     /**
  2650.      * Consente di modificare la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  2651.      *
  2652.      * Questa operazione consente di aggiornare la configurazione relativa all'autorizzazione per quanto concerne il controllo degli accessi
  2653.      *
  2654.      */
  2655.     @Override
  2656.     public void updateFruizioneControlloAccessiAutorizzazione(ControlloAccessiAutorizzazione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2657.         IContext context = this.getContext();
  2658.         try {
  2659.             context.getLogger().info("Invocazione in corso ...");    

  2660.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2661.             context.getLogger().debug("Autorizzazione completata con successo");
  2662.            
  2663.             BaseHelper.throwIfNull(body);
  2664.                        
  2665.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2666.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2667.             final PortaDelegata newPd = env.pdCore.getPortaDelegata(env.idPd);
  2668.            
  2669.             ErogazioniApiHelper.fillPortaDelegata(body, newPd);
  2670.            
  2671.             if (!ErogazioniApiHelper.controlloAccessiCheckPD(env, pd, newPd)) {
  2672.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(  env.pd.getMessage() ));
  2673.             }
  2674.            
  2675.             env.pdCore.performUpdateOperation(env.userLogin, false, newPd);
  2676.                        
  2677.             context.getLogger().info("Invocazione completata con successo");        
  2678.      
  2679.         }
  2680.         catch(javax.ws.rs.WebApplicationException e) {
  2681.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2682.             throw e;
  2683.         }
  2684.         catch(Throwable e) {
  2685.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2686.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2687.         }
  2688.     }
  2689.    
  2690.     /**
  2691.      * Consente di modificare la configurazione relativa alla gestione dei token per quanto concerne il controllo degli accessi
  2692.      *
  2693.      * Questa operazione consente di aggiornare la configurazione relativa alla gestione dei token
  2694.      *
  2695.      */
  2696.     @Override
  2697.     public void updateFruizioneControlloAccessiGestioneToken(ControlloAccessiGestioneToken body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2698.         IContext context = this.getContext();
  2699.         try {
  2700.             context.getLogger().info("Invocazione in corso ...");    

  2701.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2702.             context.getLogger().debug("Autorizzazione completata con successo");
  2703.            
  2704.             BaseHelper.throwIfNull(body);

  2705.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2706.             final PortaDelegata newPd = env.pdCore.getPortaDelegata(env.idPd);
  2707.             final PortaDelegata oldPd = env.pdCore.getPortaDelegata(env.idPd);
  2708.            
  2709.             if (body.isAbilitato()) {
  2710.                 GestioneToken gTok = newPd.getGestioneToken() != null ? newPd.getGestioneToken() : new GestioneToken();
  2711.                 ErogazioniApiHelper.fillGestioneToken(gTok, body);
  2712.                 newPd.setGestioneToken(gTok);
  2713.             }
  2714.             else
  2715.                 newPd.setGestioneToken(null);
  2716.            
  2717.             if ( !ErogazioniApiHelper.controlloAccessiCheckPD(env, oldPd, newPd)) {
  2718.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(env.pd.getMessage());
  2719.             }
  2720.            
  2721.             env.pdCore.performUpdateOperation(env.userLogin, false, newPd);
  2722.             context.getLogger().info("Invocazione completata con successo");
  2723.         }
  2724.         catch(javax.ws.rs.WebApplicationException e) {
  2725.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2726.             throw e;
  2727.         }
  2728.         catch(Throwable e) {
  2729.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2730.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2731.         }
  2732.     }
  2733.    
  2734.    /**
  2735.      * Modifica i dati di una proprietĆ  di configurazione
  2736.      *
  2737.      * Questa operazione consente di aggiornare i dati relativi ad una proprietĆ  di configurazione
  2738.      *
  2739.      */
  2740.     @Override
  2741.     public void updateFruizioneProprieta(org.openspcoop2.core.config.rs.server.model.ProprietaOpzioneCifratura body, String erogatore, String nome, Integer versione, String proprieta, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2742.         IContext context = this.getContext();
  2743.         try {
  2744.             context.getLogger().info("Invocazione in corso ...");    

  2745.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2746.             context.getLogger().debug("Autorizzazione completata con successo");    
  2747.                        
  2748.             BaseHelper.throwIfNull(body);

  2749.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );
  2750.             if(env.pdCore==null) {
  2751.                 throw new CoreException("PdCore not initialized");
  2752.             }
  2753.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2754.            
  2755.             if ((body.getNome().indexOf(" ") != -1) || (body.getValore().indexOf(" ") != -1)) {
  2756.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  2757.             }
  2758.            
  2759.             if(!proprieta.equals(body.getNome()) &&
  2760.                 // cambio nome proprieta
  2761.                 pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  2762.                 for (Proprieta p : pd.getProprietaList()) {
  2763.                     if(p.getNome().equals(body.getNome())) {
  2764.                         throw FaultCode.CONFLITTO.toException("ProprietĆ  " + body.getNome() + " giĆ  assegnata alla configurazione");
  2765.                     }
  2766.                 }
  2767.             }
  2768.            
  2769.             boolean found = false;
  2770.             if(pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  2771.                 for (Proprieta p : pd.getProprietaList()) {
  2772.                     if(p.getNome().equals(proprieta)) {
  2773.                         p.setNome(body.getNome());
  2774.                         if(env.pdCore!=null && env.pdCore.getDriverBYOKUtilities()!=null &&
  2775.                                 body.isEncrypted()!=null && body.isEncrypted().booleanValue()) {
  2776.                             p.setValore(env.pdCore.getDriverBYOKUtilities().wrap(body.getValore()));
  2777.                         }
  2778.                         else {
  2779.                             if(body.getValore().length()>255) {
  2780.                                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_255);
  2781.                             }
  2782.                             p.setValore(body.getValore());
  2783.                         }
  2784.                         found = true;
  2785.                         break;
  2786.                     }
  2787.                 }
  2788.             }
  2789.            
  2790.             if(!found) {
  2791.                 throw FaultCode.NOT_FOUND.toException("ProprietĆ  " + body.getNome() + " non presente nella configurazione");
  2792.             }
  2793.            
  2794.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  2795.             context.getLogger().info("Invocazione completata con successo");
  2796.      
  2797.         }
  2798.         catch(javax.ws.rs.WebApplicationException e) {
  2799.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2800.             throw e;
  2801.         }
  2802.         catch(Throwable e) {
  2803.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2804.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2805.         }
  2806.     }

  2807.     /**
  2808.      * Consente di modificare la configurazione relativa all&#x27;identificazione degli attributi per quanto concerne il controllo degli accessi
  2809.      *
  2810.      * Questa operazione consente di aggiornare la configurazione relativa all&#x27;identificazione degli attributi
  2811.      *
  2812.      */
  2813.     @Override
  2814.     public void updateFruizioneControlloAccessiIdentificazioneAttributi(ControlloAccessiIdentificazioneAttributi body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2815.         IContext context = this.getContext();
  2816.         try {
  2817.             context.getLogger().info("Invocazione in corso ...");    

  2818.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2819.             context.getLogger().debug("Autorizzazione completata con successo");    
  2820.            
  2821.             BaseHelper.throwIfNull(body);

  2822.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2823.             final PortaDelegata newPd = env.pdCore.getPortaDelegata(env.idPd);
  2824.             final PortaDelegata oldPd = env.pdCore.getPortaDelegata(env.idPd);
  2825.            
  2826.             if (body.isAbilitato() && body.getAttributeAuthority()!=null && !body.getAttributeAuthority().isEmpty()) {
  2827.                 if(newPd.getAttributeAuthorityList()==null) {
  2828.                     newPd.setAttributeAuthorityList(new ArrayList<AttributeAuthority>());
  2829.                 }
  2830.                 else {
  2831.                     newPd.getAttributeAuthorityList().clear();
  2832.                 }
  2833.                 for (ControlloAccessiAttributeAuthority controlloAccessiAttributeAuthority : body.getAttributeAuthority()) {
  2834.                    
  2835.                     GenericProperties gp = null;
  2836.                     try {
  2837.                         gp = env.confCore.getGenericProperties(controlloAccessiAttributeAuthority.getNome(), org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, false);
  2838.                     }catch(DriverConfigurazioneNotFound notFound) {}
  2839.                     if(gp==null) {
  2840.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("AttributeAuthority '"+controlloAccessiAttributeAuthority.getNome()+"' non esistente");
  2841.                     }
  2842.                    
  2843.                     AttributeAuthority aa = new AttributeAuthority();
  2844.                     aa.setNome(controlloAccessiAttributeAuthority.getNome());
  2845.                     if(controlloAccessiAttributeAuthority.getAttributi()!=null && !controlloAccessiAttributeAuthority.getAttributi().isEmpty()) {
  2846.                         aa.setAttributoList(controlloAccessiAttributeAuthority.getAttributi());
  2847.                     }
  2848.                     newPd.addAttributeAuthority(aa);
  2849.                 }
  2850.             }
  2851.             else {
  2852.                 if(newPd.getAttributeAuthorityList()!=null) {
  2853.                     newPd.getAttributeAuthorityList().clear();
  2854.                 }
  2855.                 else {
  2856.                     newPd.setAttributeAuthorityList(new ArrayList<AttributeAuthority>());
  2857.                 }
  2858.             }
  2859.            
  2860.             if ( !ErogazioniApiHelper.controlloAccessiCheckPD(env, oldPd, newPd)) {
  2861.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(env.pd.getMessage());
  2862.             }
  2863.            
  2864.             env.pdCore.performUpdateOperation(env.userLogin, false, newPd);
  2865.             context.getLogger().info("Invocazione completata con successo");
  2866.         }
  2867.         catch(javax.ws.rs.WebApplicationException e) {
  2868.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2869.             throw e;
  2870.         }
  2871.         catch(Throwable e) {
  2872.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2873.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2874.         }
  2875.     }
  2876.    

  2877.     /**
  2878.      * Consente di modificare la configurazione CORS associata alla fruizione
  2879.      *
  2880.      * Questa operazione consente di aggiornare la configurazione CORS associata alla fruizione identificata dall'erogatore, dal nome e dalla versione
  2881.      *
  2882.      */
  2883.     @Override
  2884.     public void updateFruizioneGestioneCORS(GestioneCors body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  2885.         IContext context = this.getContext();
  2886.         try {
  2887.             context.getLogger().info("Invocazione in corso ...");    

  2888.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2889.             context.getLogger().debug("Autorizzazione completata con successo");    
  2890.                        
  2891.             BaseHelper.throwIfNull(body);  
  2892.              
  2893.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  2894.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  2895.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(
  2896.                     () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(),  env),
  2897.                     "Fruizione"
  2898.                 );
  2899.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  2900.             final IDPortaDelegata idPd =  ErogazioniApiHelper.getIDGruppoPDDefault(env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  2901.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  2902.             final CorsConfigurazione oldConf = pd.getGestioneCors();
  2903.            
  2904.             if (body.isRidefinito())
  2905.                 pd.setGestioneCors(ErogazioniApiHelper.buildCorsConfigurazione(body, env, oldConf));
  2906.             else
  2907.                 pd.setGestioneCors(null);
  2908.            
  2909.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  2910.            
  2911.             context.getLogger().info("Invocazione completata con successo");
  2912.         }
  2913.         catch(javax.ws.rs.WebApplicationException e) {
  2914.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2915.             throw e;
  2916.         }
  2917.         catch(Throwable e) {
  2918.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2919.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2920.         }
  2921.     }
  2922.    
  2923.     /**
  2924.      * Modifica i dati di una policy di rate limiting
  2925.      *
  2926.      * Questa operazione consente di aggiornare i dati relativi ad una policy di rate limiting
  2927.      *
  2928.      */
  2929.     @Override
  2930.     public void updateFruizioneRateLimitingPolicy(RateLimitingPolicyFruizioneUpdate body, String erogatore, String nome, Integer versione, String idPolicy, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2931.         IContext context = this.getContext();
  2932.         try {
  2933.             context.getLogger().info("Invocazione in corso ...");    

  2934.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2935.             context.getLogger().debug("Autorizzazione completata con successo");    
  2936.                        
  2937.             BaseHelper.throwIfNull(body);
  2938.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2939.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2940.            
  2941.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  2942.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  2943.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  2944.                     "Fruizione");
  2945.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  2946.            
  2947.             AttivazionePolicy policy = BaseHelper.supplyOrNotFound(
  2948.                     () -> env.confCore.getAttivazionePolicy(idPolicy, RuoloPolicy.DELEGATA, pd.getNome()),
  2949.                     "Rate Limiting Policy con nome " + idPolicy
  2950.                 );
  2951.             if ( policy == null )
  2952.                 throw FaultCode.NOT_FOUND.toException("Nessuna policy di rate limiting con nome " + idPolicy );
  2953.            
  2954.             InfoPolicy infoPolicy = env.confCore.getInfoPolicy(policy.getIdPolicy());
  2955.             ErogazioniApiHelper.override(infoPolicy.getTipoRisorsa(), body, env.protocolFactory.getProtocol(),  env.idSoggetto.toIDSoggetto(), env.requestWrapper);

  2956.             String errorAttivazione = env.confHelper.readDatiAttivazionePolicyFromHttpParameters(policy, false, TipoOperazione.CHANGE, infoPolicy);
  2957.             if ( !StringUtils.isEmpty(errorAttivazione) ) {
  2958.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(errorAttivazione));
  2959.             }
  2960.            
  2961.             String modalita = ErogazioniApiHelper.getDataElementModalita(infoPolicy.isBuiltIn());
  2962.             FruizioniConfigurazioneHelper.attivazionePolicyCheckData(TipoOperazione.CHANGE, pd, policy,infoPolicy, env, env.apcCore.toMessageServiceBinding(apc.getServiceBinding()), modalita);
  2963.            
  2964.             env.confCore.performUpdateOperation(env.userLogin, false, policy);
  2965.            
  2966.             context.getLogger().info("Invocazione completata con successo");
  2967.         }
  2968.         catch(javax.ws.rs.WebApplicationException e) {
  2969.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  2970.             throw e;
  2971.         }
  2972.         catch(Throwable e) {
  2973.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  2974.             throw FaultCode.ERRORE_INTERNO.toException(e);
  2975.         }
  2976.     }
  2977.    
  2978.     /**
  2979.      * Consente di modificare la configurazione relativa alla registrazione dei diagnostici
  2980.      *
  2981.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione dei diagnostici
  2982.      *
  2983.      */
  2984.     @Override
  2985.     public void updateFruizioneRegistrazioneDiagnostici(RegistrazioneDiagnosticiConfigurazione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  2986.         IContext context = this.getContext();
  2987.         try {
  2988.             context.getLogger().info("Invocazione in corso ...");    

  2989.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  2990.             context.getLogger().debug("Autorizzazione completata con successo");    
  2991.                        
  2992.             BaseHelper.throwIfNull(body);  

  2993.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  2994.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  2995.            
  2996.             ErogazioniApiHelper.updateTracciamento(body, pd, env);
  2997.            
  2998.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  2999.            
  3000.             context.getLogger().info("Invocazione completata con successo");
  3001.        
  3002.         }
  3003.         catch(javax.ws.rs.WebApplicationException e) {
  3004.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3005.             throw e;
  3006.         }
  3007.         catch(Throwable e) {
  3008.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3009.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3010.         }
  3011.     }

  3012.     /**
  3013.      * Consente di modificare la configurazione relativa alla registrazione dei messaggi
  3014.      *
  3015.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione dei messaggi
  3016.      *
  3017.      */
  3018.     @Override
  3019.     public void updateFruizioneRegistrazioneMessaggi(RegistrazioneMessaggi body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3020.         IContext context = this.getContext();
  3021.         try {
  3022.             context.getLogger().info("Invocazione in corso ...");    

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

  3027.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3028.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  3029.            
  3030.             if (body.isRidefinito())
  3031.                 pd.setDump(ErogazioniApiHelper.buildDumpConfigurazione(body, false, env));
  3032.             else
  3033.                 pd.setDump(null);
  3034.            
  3035.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  3036.        
  3037.             context.getLogger().info("Invocazione completata con successo");            
  3038.         }
  3039.         catch(javax.ws.rs.WebApplicationException e) {
  3040.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3041.             throw e;
  3042.         }
  3043.         catch(Throwable e) {
  3044.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3045.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3046.         }
  3047.     }
  3048.    
  3049.     /**
  3050.      * Consente di modificare la configurazione relativa alla registrazione delle transazioni
  3051.      *
  3052.      * Questa operazione consente di aggiornare la configurazione relativa alla registrazione delle transazioni
  3053.      *
  3054.      */
  3055.     @Override
  3056.     public void updateFruizioneRegistrazioneTransazioni(RegistrazioneTransazioniConfigurazione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3057.         IContext context = this.getContext();
  3058.         try {
  3059.             context.getLogger().info("Invocazione in corso ...");    

  3060.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3061.             context.getLogger().debug("Autorizzazione completata con successo");    
  3062.                        
  3063.             BaseHelper.throwIfNull(body);  

  3064.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3065.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  3066.            
  3067.             ErogazioniApiHelper.updateTracciamento(body, pd, env);
  3068.            
  3069.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  3070.        
  3071.             context.getLogger().info("Invocazione completata con successo");
  3072.        
  3073.         }
  3074.         catch(javax.ws.rs.WebApplicationException e) {
  3075.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3076.             throw e;
  3077.         }
  3078.         catch(Throwable e) {
  3079.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3080.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3081.         }
  3082.     }

  3083.     /**
  3084.      * Consente di modificare lo stato del gruppo
  3085.      *
  3086.      * Questa operazione consente di aggiornare lo stato del gruppo
  3087.      *
  3088.      */
  3089.     @Override
  3090.     public void updateFruizioneStato(ApiImplStato body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3091.         IContext context = this.getContext();
  3092.         try {
  3093.             context.getLogger().info("Invocazione in corso ...");    

  3094.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3095.             context.getLogger().debug("Autorizzazione completata con successo");    
  3096.                            
  3097.             BaseHelper.throwIfNull(body);  

  3098.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3099.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  3100.            
  3101.             IDPortaDelegata oldIDPortaDelegataForUpdate= new IDPortaDelegata();
  3102.             oldIDPortaDelegataForUpdate.setNome(pd.getNome());
  3103.             pd.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
  3104.            
  3105.             pd.setStato(Helper.boolToStatoFunzionalitaConf(body.isAbilitato()));
  3106.                        
  3107.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  3108.                
  3109.             context.getLogger().info("Invocazione completata con successo");
  3110.        
  3111.      
  3112.         }
  3113.         catch(javax.ws.rs.WebApplicationException e) {
  3114.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3115.             throw e;
  3116.         }
  3117.         catch(Throwable e) {
  3118.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3119.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3120.         }
  3121.     }
  3122.    
  3123.     /**
  3124.      * Modifica i dati di una regola di correlazione applicativa per la richiesta
  3125.      *
  3126.      * Questa operazione consente di aggiornare i dati relativi ad una regola di correlazione applicativa per la richiesta
  3127.      *
  3128.      */
  3129.     @Override
  3130.     public void updateFruizioneTracciamentoCorrelazioneApplicativaRichiesta(CorrelazioneApplicativaRichiesta body, String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3131.         IContext context = this.getContext();
  3132.         try {
  3133.             context.getLogger().info("Invocazione in corso ...");    

  3134.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3135.             context.getLogger().debug("Autorizzazione completata con successo");    
  3136.                        
  3137.             BaseHelper.throwIfNull(body);

  3138.             if ( body.getElemento() == null )
  3139.                 body.setElemento("");
  3140.            
  3141.             final String searchElemento = elemento.equals("*")
  3142.                     ? ""
  3143.                     : elemento;

  3144.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3145.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);  
  3146.             final Long idPorta = pd.getId();
  3147.            
  3148.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  3149.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  3150.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  3151.                     "Fruizione");
  3152.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3153.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  3154.            
  3155.             if (pd.getCorrelazioneApplicativa() == null)
  3156.                 pd.setCorrelazioneApplicativa(new org.openspcoop2.core.config.CorrelazioneApplicativa());
  3157.            
  3158.             final List<CorrelazioneApplicativaElemento> correlazioni = pd.getCorrelazioneApplicativa().getElementoList();
  3159.             final CorrelazioneApplicativaElemento oldElem = BaseHelper.findAndRemoveFirst(correlazioni, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento));
  3160.            
  3161.             if ( oldElem == null )
  3162.                 throw FaultCode.NOT_FOUND.toException("Correlazione Applicativa Richiesta per l'elemento " + elemento + " non trovata ");
  3163.            
  3164.             if ( !correlazioneApplicativaRichiestaCheckData(TipoOperazione.CHANGE, env.requestWrapper, env.pdHelper, true, body, idPorta, oldElem.getId(),
  3165.                     serviceBinding)) {
  3166.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3167.             }
  3168.            
  3169.             correlazioni.add(convert(body));
  3170.                        
  3171.             pd.getCorrelazioneApplicativa().setElementoList(correlazioni);
  3172.            
  3173.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  3174.            
  3175.            
  3176.             context.getLogger().info("Invocazione completata con successo");
  3177.        
  3178.      
  3179.         }
  3180.         catch(javax.ws.rs.WebApplicationException e) {
  3181.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3182.             throw e;
  3183.         }
  3184.         catch(Throwable e) {
  3185.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3186.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3187.         }
  3188.     }
  3189.    
  3190.     /**
  3191.      * Modifica i dati di una regola di correlazione applicativa per la risposta
  3192.      *
  3193.      * Questa operazione consente di aggiornare i dati relativi ad una regola di correlazione applicativa per la risposta
  3194.      *
  3195.      */
  3196.     @Override
  3197.     public void updateFruizioneTracciamentoCorrelazioneApplicativaRisposta(CorrelazioneApplicativaRisposta body, String erogatore, String nome, Integer versione, String elemento, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3198.         IContext context = this.getContext();
  3199.         try {
  3200.             context.getLogger().info("Invocazione in corso ...");    

  3201.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3202.             context.getLogger().debug("Autorizzazione completata con successo");    
  3203.                        
  3204.             BaseHelper.throwIfNull(body);

  3205.             if ( body.getElemento() == null )
  3206.                 body.setElemento("");
  3207.            
  3208.             final String searchElemento = elemento.equals("*")
  3209.                     ? ""
  3210.                     : elemento;

  3211.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3212.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);  
  3213.             final Long idPorta = pd.getId();

  3214.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  3215.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound(() -> ErogazioniApiHelper
  3216.                     .getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env),
  3217.                     "Fruizione");
  3218.             final AccordoServizioParteComuneSintetico apc = env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  3219.             ServiceBinding serviceBinding = env.apcCore.toMessageServiceBinding(apc.getServiceBinding());
  3220.            
  3221.             if (pd.getCorrelazioneApplicativaRisposta() == null)
  3222.                 pd.setCorrelazioneApplicativaRisposta(new org.openspcoop2.core.config.CorrelazioneApplicativaRisposta());
  3223.            
  3224.             final List<CorrelazioneApplicativaRispostaElemento> correlazioni = pd.getCorrelazioneApplicativaRisposta().getElementoList();
  3225.             final CorrelazioneApplicativaRispostaElemento oldElem = BaseHelper.findAndRemoveFirst(correlazioni, c -> (c.getNome()==null ? "" : c.getNome()).equals(searchElemento));
  3226.            
  3227.             if ( oldElem == null )
  3228.                 throw FaultCode.NOT_FOUND.toException("Correlazione Applicativa Risposta per l'elemento " + elemento + " non trovata ");
  3229.            
  3230.             if ( !correlazioneApplicativaRispostaCheckData(TipoOperazione.CHANGE, env.requestWrapper, env.pdHelper, true, body, idPorta, oldElem.getId(),
  3231.                     serviceBinding)) {
  3232.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3233.             }
  3234.            
  3235.             correlazioni.add(convert(body));
  3236.                        
  3237.             pd.getCorrelazioneApplicativaRisposta().setElementoList(correlazioni);
  3238.            
  3239.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  3240.                    
  3241.             context.getLogger().info("Invocazione completata con successo");
  3242.        
  3243.         }
  3244.         catch(javax.ws.rs.WebApplicationException e) {
  3245.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3246.             throw e;
  3247.         }
  3248.         catch(Throwable e) {
  3249.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3250.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3251.         }
  3252.     }
  3253.    
  3254.     /**
  3255.      * Consente di modificare la configurazione relativa alla validazione dei contenuti applicativi
  3256.      *
  3257.      * Questa operazione consente di aggiornare la configurazione relativa alla validazione dei contenuti applicativi
  3258.      *
  3259.      */
  3260.     @Override
  3261.     public void updateFruizioneValidazione(Validazione body, String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String gruppo, String tipoServizio) {
  3262.         IContext context = this.getContext();
  3263.         try {
  3264.             context.getLogger().info("Invocazione in corso ...");    

  3265.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  3266.             context.getLogger().debug("Autorizzazione completata con successo");    
  3267.              
  3268.             BaseHelper.throwIfNull(body);  

  3269.             final FruizioniConfEnv env = new FruizioniConfEnv(context.getServletRequest(), profilo, soggetto, context, erogatore, nome, versione, gruppo, tipoServizio );      
  3270.             final PortaDelegata pd = env.pdCore.getPortaDelegata(env.idPd);
  3271.            
  3272.             // ============================================
  3273.             final String stato = BaseHelper.evalnull( () -> body.getStato().toString());
  3274.             final String tipoValidazione = BaseHelper.evalnull( () -> body.getTipo().toString() );
  3275.            
  3276.             env.requestWrapper.overrideParameter(CostantiControlStation.PARAMETRO_PORTE_XSD, stato);
  3277.            
  3278.             if (!env.pdHelper.validazioneContenutiCheck(TipoOperazione.OTHER, true)) {
  3279.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  3280.             }
  3281.            
  3282.             final ValidazioneContenutiApplicativi vx = new ValidazioneContenutiApplicativi();
  3283.            
  3284.             // Imposto Mtom al valore eventualmente giĆ  presente nel db.
  3285.             vx.setAcceptMtomMessage( BaseHelper.evalnull( () -> pd.getValidazioneContenutiApplicativi().getAcceptMtomMessage()) );
  3286.             vx.setStato( StatoFunzionalitaConWarning.toEnumConstant(stato) );
  3287.             vx.setTipo( ValidazioneContenutiApplicativiTipo.toEnumConstant(tipoValidazione) );
  3288.            
  3289.             pd.setValidazioneContenutiApplicativi(vx);
  3290.             // ============================================

  3291.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);        
  3292.             context.getLogger().info("Invocazione completata con successo");
  3293.        
  3294.      
  3295.         }
  3296.         catch(javax.ws.rs.WebApplicationException e) {
  3297.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  3298.             throw e;
  3299.         }
  3300.         catch(Throwable e) {
  3301.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  3302.             throw FaultCode.ERRORE_INTERNO.toException(e);
  3303.         }
  3304.     }
  3305.    
  3306. }