FruizioniConfigurazioneHelper.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 java.util.ArrayList;
  22. import java.util.List;

  23. import org.apache.commons.lang.StringEscapeUtils;
  24. import org.openspcoop2.core.config.PortaDelegata;
  25. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper;
  26. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  27. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  28. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  29. import org.openspcoop2.core.id.IDRuolo;
  30. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  31. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  32. import org.openspcoop2.message.constants.ServiceBinding;
  33. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  34. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  35. /**
  36.  * FruizioniConfigurazioneHelper
  37.  *
  38.  * @author Poli Andrea (apoli@link.it)
  39.  * @author $Author$
  40.  * @version $Rev$, $Date$
  41.  */
  42. public class FruizioniConfigurazioneHelper {

  43.     public static void attivazionePolicyCheckData(
  44.             TipoOperazione tipoOperazione,
  45.             PortaDelegata pd,
  46.             AttivazionePolicy policy,
  47.             InfoPolicy infoPolicy,  
  48.             FruizioniConfEnv env,
  49.             ServiceBinding serviceBinding,
  50.             String modalita) throws Exception  {
  51.        
  52.         org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneControlloTraffico = env.confCore.getConfigurazioneControlloTraffico();
  53.         final RuoloPolicy ruoloPorta = RuoloPolicy.DELEGATA;
  54.         final String nomePorta = pd.getNome();

  55.         // Controllo che l'azione scelta per il filtro sia supportata.
  56.         boolean hasAzioni = pd.getAzione() != null && pd.getAzione().getAzioneDelegataList().size() > 0;
  57.         List<String> azioniSupportate = hasAzioni ? pd.getAzione().getAzioneDelegataList()
  58.                 : env.confCore.getAzioni(env.asps, env.apcCore.getAccordoServizioSintetico(env.asps.getIdAccordo()),
  59.                         false, true, ErogazioniApiHelper.getAzioniOccupateFruizione(env.idAsps,
  60.                                 env.idSoggetto.toIDSoggetto(), env.apsCore, env.pdCore));

  61.         if(policy.getFiltro().getAzione() != null && !policy.getFiltro().getAzione().isEmpty()) {
  62.             String [] tmp = policy.getFiltro().getAzione().split(",");
  63.             if(tmp!=null && tmp.length>0) {
  64.                 for (String azCheck : tmp) {
  65.                     if ( !azioniSupportate.contains(azCheck)) {
  66.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'azione " + azCheck
  67.                                 + " non è assegnabile a una policy di rate limiting per il gruppo scelto, le azioni supportate sono: "
  68.                                 + azioniSupportate.toString());
  69.                     }
  70.                 }
  71.             }
  72.         }
  73.        
  74.         if(policy.getFiltro().getRuoloFruitore()!=null) {
  75.            
  76.             FiltroRicercaRuoli filtroRicercaRuoli = new FiltroRicercaRuoli();
  77.             filtroRicercaRuoli.setTipologia(RuoloTipologia.INTERNO);
  78.             List<IDRuolo> listIdRuoli = env.ruoliCore.getAllIdRuoli(filtroRicercaRuoli);
  79.             List<String> ruoli = new ArrayList<>();
  80.             if(listIdRuoli!=null && !listIdRuoli.isEmpty()) {
  81.                 for (IDRuolo idRuolo : listIdRuoli) {
  82.                     ruoli.add(idRuolo.getNome());
  83.                 }
  84.             }
  85.            
  86.             if ( !ruoli.contains(policy.getFiltro().getRuoloFruitore())) {
  87.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + policy.getFiltro().getRuoloFruitore() + " non esiste.");
  88.             }
  89.         }

  90.         // Controllo che l'applicativo fruitore scelto per il filtro sia supportato.
  91.         if (policy.getFiltro().getServizioApplicativoFruitore() != null && !env.confCore
  92.                 .getServiziApplicativiFruitore(env.tipo_protocollo, null, env.idSoggetto.getTipo(),
  93.                         env.idSoggetto.getNome())
  94.                 .stream().filter(id -> id.getNome().equals(policy.getFiltro().getServizioApplicativoFruitore()))
  95.                 .findAny().isPresent()) {
  96.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(
  97.                     "Il servizio applicativo fruitore " + policy.getFiltro().getServizioApplicativoFruitore()
  98.                             + " scelto non è assegnabile alla policy di rate limiting");
  99.         }
  100.        
  101.         if (! env.confHelper.attivazionePolicyCheckData(new StringBuilder(), tipoOperazione, configurazioneControlloTraffico,
  102.                 policy,infoPolicy, ruoloPorta, nomePorta, serviceBinding, modalita) ) {
  103.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  104.         }
  105.     }

  106. }