FruizioniConfigurazioneHelper.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.core.config.rs.server.api.impl.fruizioni.configurazione;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper;
import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
import org.openspcoop2.core.id.IDRuolo;
import org.openspcoop2.core.registry.constants.RuoloTipologia;
import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
import org.openspcoop2.message.constants.ServiceBinding;
import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
import org.openspcoop2.web.lib.mvc.TipoOperazione;
/**
* FruizioniConfigurazioneHelper
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class FruizioniConfigurazioneHelper {
public static void attivazionePolicyCheckData(
TipoOperazione tipoOperazione,
PortaDelegata pd,
AttivazionePolicy policy,
InfoPolicy infoPolicy,
FruizioniConfEnv env,
ServiceBinding serviceBinding,
String modalita) throws Exception {
org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneControlloTraffico = env.confCore.getConfigurazioneControlloTraffico();
final RuoloPolicy ruoloPorta = RuoloPolicy.DELEGATA;
final String nomePorta = pd.getNome();
// Controllo che l'azione scelta per il filtro sia supportata.
boolean hasAzioni = pd.getAzione() != null && pd.getAzione().getAzioneDelegataList().size() > 0;
List<String> azioniSupportate = hasAzioni ? pd.getAzione().getAzioneDelegataList()
: env.confCore.getAzioni(env.asps, env.apcCore.getAccordoServizioSintetico(env.asps.getIdAccordo()),
false, true, ErogazioniApiHelper.getAzioniOccupateFruizione(env.idAsps,
env.idSoggetto.toIDSoggetto(), env.apsCore, env.pdCore));
if(policy.getFiltro().getAzione() != null && !policy.getFiltro().getAzione().isEmpty()) {
String [] tmp = policy.getFiltro().getAzione().split(",");
if(tmp!=null && tmp.length>0) {
for (String azCheck : tmp) {
if ( !azioniSupportate.contains(azCheck)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("L'azione " + azCheck
+ " non è assegnabile a una policy di rate limiting per il gruppo scelto, le azioni supportate sono: "
+ azioniSupportate.toString());
}
}
}
}
if(policy.getFiltro().getRuoloFruitore()!=null) {
FiltroRicercaRuoli filtroRicercaRuoli = new FiltroRicercaRuoli();
filtroRicercaRuoli.setTipologia(RuoloTipologia.INTERNO);
List<IDRuolo> listIdRuoli = env.ruoliCore.getAllIdRuoli(filtroRicercaRuoli);
List<String> ruoli = new ArrayList<>();
if(listIdRuoli!=null && !listIdRuoli.isEmpty()) {
for (IDRuolo idRuolo : listIdRuoli) {
ruoli.add(idRuolo.getNome());
}
}
if ( !ruoli.contains(policy.getFiltro().getRuoloFruitore())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo " + policy.getFiltro().getRuoloFruitore() + " non esiste.");
}
}
// Controllo che l'applicativo fruitore scelto per il filtro sia supportato.
if (policy.getFiltro().getServizioApplicativoFruitore() != null && !env.confCore
.getServiziApplicativiFruitore(env.tipo_protocollo, null, env.idSoggetto.getTipo(),
env.idSoggetto.getNome())
.stream().filter(id -> id.getNome().equals(policy.getFiltro().getServizioApplicativoFruitore()))
.findAny().isPresent()) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(
"Il servizio applicativo fruitore " + policy.getFiltro().getServizioApplicativoFruitore()
+ " scelto non è assegnabile alla policy di rate limiting");
}
if (! env.confHelper.attivazionePolicyCheckData(new StringBuilder(), tipoOperazione, configurazioneControlloTraffico,
policy,infoPolicy, ruoloPorta, nomePorta, serviceBinding, modalita) ) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
}
}