ApplicativiApiHelper.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.applicativi;
- import java.lang.reflect.InvocationTargetException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.byok.BYOKUtilities;
- import org.openspcoop2.core.config.Connettore;
- import org.openspcoop2.core.config.Credenziali;
- import org.openspcoop2.core.config.InvocazioneCredenziali;
- import org.openspcoop2.core.config.InvocazionePorta;
- import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
- import org.openspcoop2.core.config.InvocazioneServizio;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.PortaDelegataServizioApplicativo;
- import org.openspcoop2.core.config.RispostaAsincrona;
- import org.openspcoop2.core.config.Ruolo;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.config.ServizioApplicativoRuoli;
- import org.openspcoop2.core.config.constants.CostantiConfigurazione;
- import org.openspcoop2.core.config.constants.CredenzialeTipo;
- import org.openspcoop2.core.config.constants.FaultIntegrazioneTipo;
- import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.constants.TipologiaErogazione;
- import org.openspcoop2.core.config.constants.TipologiaFruizione;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
- import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
- import org.openspcoop2.core.config.rs.server.api.impl.ApiKeyInfo;
- import org.openspcoop2.core.config.rs.server.api.impl.Helper;
- import org.openspcoop2.core.config.rs.server.api.impl.HttpRequestWrapper;
- import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ConnettoreAPIHelper;
- import org.openspcoop2.core.config.rs.server.config.ServerProperties;
- import org.openspcoop2.core.config.rs.server.model.Applicativo;
- import org.openspcoop2.core.config.rs.server.model.ApplicativoItem;
- import org.openspcoop2.core.config.rs.server.model.ApplicativoServer;
- import org.openspcoop2.core.config.rs.server.model.ApplicativoServerItem;
- import org.openspcoop2.core.config.rs.server.model.AuthenticationApiKey;
- import org.openspcoop2.core.config.rs.server.model.AuthenticationHttps;
- import org.openspcoop2.core.config.rs.server.model.BaseCredenziali;
- import org.openspcoop2.core.config.rs.server.model.ModalitaAccessoEnum;
- import org.openspcoop2.core.config.rs.server.model.OneOfBaseCredenzialiCredenziali;
- import org.openspcoop2.core.config.rs.server.model.Proprieta4000;
- import org.openspcoop2.core.config.rs.server.model.Proprieta4000OpzioneCifratura;
- import org.openspcoop2.core.id.IDPortaDelegata;
- import org.openspcoop2.core.id.IDServizioApplicativo;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.Soggetto;
- import org.openspcoop2.core.registry.constants.RuoloContesto;
- import org.openspcoop2.core.registry.constants.RuoloTipologia;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
- import org.openspcoop2.pdd.core.autenticazione.ApiKey;
- import org.openspcoop2.pdd.core.autenticazione.ApiKeyUtilities;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
- import org.openspcoop2.protocol.sdk.properties.AbstractProperty;
- import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
- import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
- import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
- import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
- import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
- import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.regexp.RegularExpressionEngine;
- import org.openspcoop2.utils.service.beans.ProfiloEnum;
- import org.openspcoop2.utils.service.beans.utils.BaseHelper;
- import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
- import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
- import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
- import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
- import org.openspcoop2.web.ctrlstat.servlet.ConsoleHelper;
- import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
- import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
- import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
- import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
- import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
- import org.openspcoop2.web.lib.mvc.TipoOperazione;
- /**
- * ApplicativiApiHelper
- *
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class ApplicativiApiHelper {
-
- public static void validateCredentials(OneOfBaseCredenzialiCredenziali creds, boolean dominioInterno, boolean profiloModi) throws Exception {
- if(creds!=null && creds instanceof AuthenticationHttps) {
- AuthenticationHttps https = (AuthenticationHttps) creds;
- if(https.getToken()!=null && (dominioInterno || !profiloModi)) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è possibile definire anche una configurazione 'token' alle credenziali di tipo '"+creds.getModalitaAccesso()+"' se l'applicativo non è di profilo ModI e di dominio esterno");
- }
- }
- }
- public static void overrideSAParameters(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, Applicativo applicativo,
- ApiKeyInfo apiKeyInfo, boolean updateKey) {
- overrideSAParameters(wrap, consoleHelper, sa, applicativo.getCredenziali(),
- apiKeyInfo, updateKey);
- }
- public static void overrideSAParameters(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, OneOfBaseCredenzialiCredenziali credenzialiApiRest,
- ApiKeyInfo apiKeyInfo, boolean updateKey) {
- Credenziali credenziali = sa.getInvocazionePorta().getCredenziali(0);
-
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME, sa.getNome());
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto());
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT, ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP);
-
- wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE, credenziali.getTipo().toString());
- if(CredenzialeTipo.SSL.equals(credenziali.getTipo())){
- if(credenziali.getTokenPolicy()!=null && StringUtils.isNotEmpty(credenziali.getTokenPolicy())){
- wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE, ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH);
- }
- }
-
- if(credenzialiApiRest!=null) {
-
- Helper.overrideAuthParams(wrap, consoleHelper, credenzialiApiRest,
- apiKeyInfo, updateKey);
- }
- }
-
- public static void overrideSAParametersApplicativoServer(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, boolean updateKey) {
- // Credenziali credenziali = sa.getInvocazionePorta().getCredenziali(0);
-
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME, sa.getNome());
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto());
- wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT, ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP);
-
- // wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE, credenziali.getTipo().toString());
-
- }
-
-
- public static ServizioApplicativo applicativoToServizioApplicativo(
- ApplicativoServer applicativo,
- String tipoProtocollo,
- String soggetto,
- ControlStationCore stationCore) throws UtilsException, DriverControlStationException, ProtocolException, DriverRegistroServiziException, DriverRegistroServiziNotFound {
- ServerProperties serverProperties = ServerProperties.getInstance();
-
- if(stationCore!=null) {
- // nop
- }
-
- ControlStationCore core = new ControlStationCore(true, serverProperties.getConfDirectory(),tipoProtocollo);
- SoggettiCore soggettiCore = new SoggettiCore(core);
- String tipoSoggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipoProtocollo);
- IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,soggetto);
- Soggetto soggettoRegistro = soggettiCore.getSoggettoRegistro(idSoggetto);
-
-
- //soggettoRegistro.get
- ServizioApplicativo sa = new ServizioApplicativo();
-
- sa.setDescrizione(applicativo.getDescrizione());
-
- sa.setNome(applicativo.getNome());
- sa.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
- sa.setTipo(CostantiConfigurazione.SERVER);
- sa.setTipologiaErogazione(TipologiaErogazione.DISABILITATO.getValue());
-
- //Inseriamo il soggetto del registro locale
- sa.setIdSoggetto(soggettoRegistro.getId());
- sa.setNomeSoggettoProprietario(soggettoRegistro.getNome());
- sa.setTipoSoggettoProprietario(soggettoRegistro.getTipo());
-
- // *** risposta asinc ***
- InvocazioneCredenziali credenzialiInvocazione = new InvocazioneCredenziali();
- credenzialiInvocazione.setUser("");
- credenzialiInvocazione.setPassword("");
-
- RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
- rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
- rispostaAsinc.setCredenziali(credenzialiInvocazione);
- rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
-
- sa.setRispostaAsincrona(rispostaAsinc);
-
- InvocazioneServizio invServizio = new InvocazioneServizio();
- invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
- invServizio.setCredenziali(credenzialiInvocazione);
- invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
-
- invServizio.setConnettore(new Connettore());
-
- sa.setInvocazioneServizio(invServizio);
-
- // *** Invocazione Porta ***
- InvocazionePorta invocazionePorta = new InvocazionePorta();
- // List<Credenziali> credenziali = credenzialiFromAuth(applicativo.getCredenziali(), keyInfo);
- //
- // invocazionePorta.getCredenzialiList().add(credenziali);
-
- //Imposto i ruoli
- // FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
- // filtroRuoli.setContesto(RuoloContesto.QUALSIASI); // gli applicativi possono essere usati anche nelle erogazioni.
- // filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
- //
- // List<String> allRuoli = stationCore.getAllRuoli(filtroRuoli);
- // final ServizioApplicativoRuoli ruoli = invocazionePorta.getRuoli() == null ? new ServizioApplicativoRuoli() : invocazionePorta.getRuoli();
- //
- // if (applicativo.getRuoli() != null) {
- // applicativo.getRuoli().forEach( nome -> {
- //
- // if (!allRuoli.contains(nome)) {
- // throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo di nome " + nome + " non è presente o assegnabile al servizio applicativo.");
- // }
- // Ruolo r = new Ruolo();
- // r.setNome(nome);
- // ruoli.addRuolo(r);
- // });
- // }
- // invocazionePorta.setRuoli(ruoli);
-
- final String fault = ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP;
-
- InvocazionePortaGestioneErrore ipge = new InvocazionePortaGestioneErrore();
- ipge.setFault(FaultIntegrazioneTipo.toEnumConstant(fault));
- invocazionePorta.setGestioneErrore(ipge);
-
- invocazionePorta.setSbustamentoInformazioniProtocollo(StatoFunzionalita.toEnumConstant(""));
- sa.setInvocazionePorta(invocazionePorta);
-
- // *** proprieta ***
- if(applicativo.getProprieta()!=null && !applicativo.getProprieta().isEmpty()) {
- for (Proprieta4000 proprieta : applicativo.getProprieta()) {
- org.openspcoop2.core.config.Proprieta pConfig = new org.openspcoop2.core.config.Proprieta();
- pConfig.setNome(proprieta.getNome());
- pConfig.setValore(proprieta.getValore());
- sa.addProprieta(pConfig);
- }
- }
-
- return sa;
- }
-
-
- public static ServizioApplicativo applicativoToServizioApplicativo(
- Applicativo applicativo,
- String tipoProtocollo,
- String soggetto,
- ControlStationCore stationCore,
- ApiKeyInfo keyInfo,
- boolean useEncryptEngine) throws UtilsException, DriverControlStationException, ProtocolException, DriverRegistroServiziException, DriverRegistroServiziNotFound, IllegalAccessException, InvocationTargetException, InstantiationException {
- ServerProperties serverProperties = ServerProperties.getInstance();
-
-
- ControlStationCore core = new ControlStationCore(true, serverProperties.getConfDirectory(),tipoProtocollo);
- SoggettiCore soggettiCore = new SoggettiCore(core);
- String tipoSoggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipoProtocollo);
- IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,soggetto);
- Soggetto soggettoRegistro = soggettiCore.getSoggettoRegistro(idSoggetto);
-
-
- //soggettoRegistro.get
- ServizioApplicativo sa = new ServizioApplicativo();
-
- sa.setDescrizione(applicativo.getDescrizione());
-
- sa.setNome(applicativo.getNome());
- sa.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
- sa.setTipo(CostantiConfigurazione.CLIENT);
- sa.setTipologiaErogazione(TipologiaErogazione.DISABILITATO.getValue());
-
- //Inseriamo il soggetto del registro locale
- sa.setIdSoggetto(soggettoRegistro.getId());
- sa.setNomeSoggettoProprietario(soggettoRegistro.getNome());
- sa.setTipoSoggettoProprietario(soggettoRegistro.getTipo());
-
- // *** risposta asinc ***
- InvocazioneCredenziali credenzialiInvocazione = new InvocazioneCredenziali();
- credenzialiInvocazione.setUser("");
- credenzialiInvocazione.setPassword("");
-
- RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
- rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
- rispostaAsinc.setCredenziali(credenzialiInvocazione);
- rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
-
- sa.setRispostaAsincrona(rispostaAsinc);
-
- InvocazioneServizio invServizio = new InvocazioneServizio();
- invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
- invServizio.setCredenziali(credenzialiInvocazione);
- invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
-
- sa.setInvocazioneServizio(invServizio);
-
- // *** Invocazione Porta ***
- InvocazionePorta invocazionePorta = new InvocazionePorta();
- List<Credenziali> credenziali = credenzialiFromAuth(applicativo.getCredenziali(), keyInfo);
- invocazionePorta.getCredenzialiList().addAll(credenziali);
-
- //Imposto i ruoli
- FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
- filtroRuoli.setContesto(RuoloContesto.QUALSIASI); // gli applicativi possono essere usati anche nelle erogazioni.
- filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
-
- List<String> allRuoli = stationCore.getAllRuoli(filtroRuoli);
- final ServizioApplicativoRuoli ruoli = invocazionePorta.getRuoli() == null ? new ServizioApplicativoRuoli() : invocazionePorta.getRuoli();
-
- if (applicativo.getRuoli() != null) {
- applicativo.getRuoli().forEach( nome -> {
-
- if (!allRuoli.contains(nome)) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo di nome " + nome + " non è presente o assegnabile al servizio applicativo.");
- }
- Ruolo r = new Ruolo();
- r.setNome(nome);
- ruoli.addRuolo(r);
- });
- }
- invocazionePorta.setRuoli(ruoli);
-
- final String fault = ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP;
-
- InvocazionePortaGestioneErrore ipge = new InvocazionePortaGestioneErrore();
- ipge.setFault(FaultIntegrazioneTipo.toEnumConstant(fault));
- invocazionePorta.setGestioneErrore(ipge);
-
- invocazionePorta.setSbustamentoInformazioniProtocollo(StatoFunzionalita.toEnumConstant(""));
- sa.setInvocazionePorta(invocazionePorta);
-
- // *** proprieta ***
- if(applicativo.getProprieta()!=null && !applicativo.getProprieta().isEmpty()) {
- for (Proprieta4000OpzioneCifratura proprieta : applicativo.getProprieta()) {
- org.openspcoop2.core.config.Proprieta pConfig = new org.openspcoop2.core.config.Proprieta();
- pConfig.setNome(proprieta.getNome());
- if(useEncryptEngine && stationCore.getDriverBYOKUtilities()!=null &&
- proprieta.isEncrypted()!=null && proprieta.isEncrypted().booleanValue()) {
- pConfig.setValore(stationCore.getDriverBYOKUtilities().wrap(proprieta.getValore()));
- }
- else {
- if(proprieta.getValore().length()>4000) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_4000);
- }
- pConfig.setValore(proprieta.getValore());
- }
- sa.addProprieta(pConfig);
- }
- }
-
- return sa;
- }
-
-
- public static final Applicativo servizioApplicativoToApplicativo(ServizioApplicativo sa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
- Applicativo ret = new Applicativo();
-
- ret.setNome(sa.getNome());
- ret.setDescrizione(sa.getDescrizione());
-
- InvocazionePorta invPorta = sa.getInvocazionePorta();
- if (invPorta != null) {
- ServizioApplicativoRuoli ruoli = invPorta.getRuoli();
- if (ruoli != null) {
- ret.setRuoli(ruoli.getRuoloList().stream().map( ruolo -> ruolo.getNome().toString() ).collect(Collectors.toList()));
- }
- }
-
- if(invPorta!=null) {
- ret.setCredenziali(authFromCredenziali(invPorta.getCredenzialiList()));
- }
-
- if(sa.sizeProprietaList()>0) {
- for (org.openspcoop2.core.config.Proprieta proprieta : sa.getProprietaList()) {
- Proprieta4000OpzioneCifratura p = new Proprieta4000OpzioneCifratura();
- p.setNome(proprieta.getNome());
- p.setValore(proprieta.getValore());
- p.setEncrypted(BYOKUtilities.isWrappedValue(p.getValore()));
- if(ret.getProprieta()==null) {
- ret.setProprieta(new ArrayList<>());
- }
- ret.addProprietaItem(p);
- }
- }
-
- return ret;
- }
-
- public static final ApplicativoServer servizioApplicativoToApplicativoServer(ServizioApplicativo sa) throws Exception {
- ApplicativoServer ret = new ApplicativoServer();
-
- ret.setNome(sa.getNome());
- ret.setDescrizione(sa.getDescrizione());
-
- ret.setConnettore(ConnettoreAPIHelper.getConnettoreApplicativoServer(sa));
-
- if(sa.sizeProprietaList()>0) {
- for (org.openspcoop2.core.config.Proprieta proprieta : sa.getProprietaList()) {
- Proprieta4000 p = new Proprieta4000();
- p.setNome(proprieta.getNome());
- p.setValore(proprieta.getValore());
- if(ret.getProprieta()==null) {
- ret.setProprieta(new ArrayList<Proprieta4000>());
- }
- ret.addProprietaItem(p);
- }
- }
-
- return ret;
- }
-
- public static Map<String, AbstractProperty<?>> getProtocolPropertiesMap(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
- ProtocolProperties prop = getProtocolProperties(sa, env);
- Map<String, AbstractProperty<?>> p = new HashMap<>();
- for(int i =0; i < prop.sizeProperties(); i++) {
- p.put(prop.getIdProperty(i), prop.getProperty(i));
- }
-
- return p;
- }
- public static ProtocolProperties getProtocolProperties(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
- ConsoleConfiguration consoleConf = getConsoleConfiguration(sa, env);
- ProtocolProperties prop = env.saHelper.estraiProtocolPropertiesDaRequest(consoleConf, ConsoleOperationType.CHANGE);
- ProtocolPropertiesUtils.mergeProtocolPropertiesConfig(prop, sa.getProtocolPropertyList(), ConsoleOperationType.CHANGE);
- return prop;
- }
- public static ConsoleConfiguration getConsoleConfiguration(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
- IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
- IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
- IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- idSA.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
- idSA.setNome(sa.getNome());
-
- return consoleDynamicConfiguration.getDynamicConfigServizioApplicativo(ConsoleOperationType.ADD, env.saHelper,
- registryReader, configRegistryReader, idSA);
- }
- public static ProtocolProperties getProtocolProperties(Applicativo body, ProfiloEnum profilo, ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
- if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
- }
- switch(profilo) {
- case APIGATEWAY:
- return null;// trasparente
- case EDELIVERY:
- return EDeliveryApplicativiApiHelper.getProtocolProperties(body);
- case FATTURAPA:
- return FatturaPAApplicativiApiHelper.getProtocolProperties(body);
- case MODI:
- case MODIPA:
- return ModiApplicativiApiHelper.getProtocolProperties(body, sa, env);
- case SPCOOP:
- return SPCoopApplicativiApiHelper.getProtocolProperties(body);
- }
- return null;
- }
- public static void populateProtocolInfo(ServizioApplicativo sa, Applicativo ret, ApplicativiEnv env, ProfiloEnum profilo) throws Exception {
-
- if(profilo != null) {
- switch(profilo) {
- case APIGATEWAY:
- break;
- case EDELIVERY: EDeliveryApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
- break;
- case FATTURAPA: FatturaPAApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
- break;
- case MODI:
- case MODIPA: ModiApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
- break;
- case SPCOOP: SPCoopApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
- break;
- default:
- break;}
- }
- }
- // Rationale: Questa funzione è bene che sia unchecked. Se non esplicitamente catturata infatti, comporterà in ogni caso lato API
- // la segnalazione di un errore interno.
- //
- // Il fatto che abbiamo creato nel sistema un oggetto di tipo ServizioApplicativo ritenuto corretto (il parametro)
- // ma per il quale non si riesce più a recuperare, mmmh.
- // + Il tipo del soggetto propietario
- // + Il tipo del protocollo associato al tipo del soggeto
- // + Il servizio protocolli stesso
- //
- // Denotano un errore interno.
- //
- // è una funzione che effettua un mapping da un tipo all'altro e che potrà essere utilizzata liberamente negli stream.
-
- public static final ApplicativoItem servizioApplicativoToApplicativoItem(ServizioApplicativo sa) {
- ApplicativoItem ret = new ApplicativoItem();
-
- ret.setNome(sa.getNome());
-
- String tipo_protocollo = null;
-
- try {
- tipo_protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(sa.getTipoSoggettoProprietario());
- } catch (ProtocolException e) {
-
- e.printStackTrace(System.err);
- throw new RuntimeException(e);
- }
-
- ret.setProfilo(BaseHelper.profiloFromTipoProtocollo.get(tipo_protocollo));
- ret.setSoggetto(sa.getNomeSoggettoProprietario());
-
- ServizioApplicativoRuoli saRoles = null;
- if(sa.getInvocazionePorta()!=null) {
- saRoles = sa.getInvocazionePorta().getRuoli();
- }
- if (saRoles == null) {
- ret.setCountRuoli(0);
- }
- else {
- ret.setCountRuoli(saRoles.sizeRuoloList());
- }
-
- return ret;
- }
-
- public static final ApplicativoServerItem servizioApplicativoToApplicativoServerItem(ServizioApplicativo sa) {
- ApplicativoServerItem ret = new ApplicativoServerItem();
-
- ret.setNome(sa.getNome());
-
- String tipo_protocollo = null;
-
- try {
- tipo_protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(sa.getTipoSoggettoProprietario());
- } catch (ProtocolException e) {
-
- e.printStackTrace(System.err);
- throw new RuntimeException(e);
- }
-
- ret.setProfilo(BaseHelper.profiloFromTipoProtocollo.get(tipo_protocollo));
- ret.setSoggetto(sa.getNomeSoggettoProprietario());
-
- return ret;
- }
-
-
-
- public static final IDSoggetto getIDSoggetto(String nome, String tipo_protocollo) throws ProtocolException {
- String tipo_soggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipo_protocollo);
- return new IDSoggetto(tipo_soggetto,nome);
- }
-
- public static final Soggetto getSoggetto(String nome, ProfiloEnum modalita, SoggettiCore soggettiCore) throws DriverRegistroServiziException, DriverRegistroServiziNotFound, ProtocolException {
- return soggettiCore.getSoggettoRegistro(getIDSoggetto(nome,BaseHelper.tipoProtocolloFromProfilo.get(modalita)));
- }
-
-
- /**
- * Swagger passa le credenziali come una linkedHashMap.
- * Dobbiamo trasformarla nei relativi oggetti di autenticazione.
- *
- * TODO: Rimuovere questa versione e utilizzare quella in RestApiHelper.
- *
- * @param applicativo
- * @return
- * @throws Exception
- */
- public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(Applicativo applicativo, boolean create) {
- if(applicativo.getCredenziali()==null) {
- return null;
- }
- return translateCredenzialiApplicativo(applicativo.getCredenziali(), create);
- }
- public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(BaseCredenziali baseCredenziali, boolean create) {
- if(baseCredenziali==null) {
- return null;
- }
- return translateCredenzialiApplicativo(baseCredenziali.getCredenziali(), create);
- }
- public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(OneOfBaseCredenzialiCredenziali c, boolean create) {
- OneOfBaseCredenzialiCredenziali creds = null;
-
- if(c==null || c.getModalitaAccesso()==null) {
- return null;
- }
-
- String tipoauthSA = Helper.tipoAuthSAFromModalita.get(c.getModalitaAccesso().toString());
-
- if (tipoauthSA == null)
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo modalità accesso sconosciuto: " + c.getModalitaAccesso());
-
- if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC) ||
- tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL) ||
- tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY) ||
- tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL) ||
- tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN)) {
- creds = Helper.translateCredenziali(c, create);
- }
- else if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)) {
- creds = null;
- }
- else {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo autenticazione sconosciuto: " + tipoauthSA);
- }
- return creds;
- }
-
-
- public static ApiKeyInfo createApiKey(OneOfBaseCredenzialiCredenziali creds, IDServizioApplicativo idSA, ServiziApplicativiCore saCore, String protocollo) throws Exception {
- if(creds!=null && ModalitaAccessoEnum.API_KEY.equals(creds.getModalitaAccesso())) {
- AuthenticationApiKey apiKey = (AuthenticationApiKey) creds;
- boolean appId = Helper.isAppId(apiKey.isAppId());
- ApiKeyInfo keyInfo = new ApiKeyInfo();
- keyInfo.setMultipleApiKeys(appId);
- ApiKey apiKeyGenerated = null;
- if(appId) {
- apiKeyGenerated = saCore.newMultipleApiKey();
- keyInfo.setAppId(saCore.toAppId(protocollo, idSA, appId));
- }
- else {
- keyInfo.setAppId(saCore.toAppId(protocollo, idSA, appId));
- apiKeyGenerated = saCore.newApiKey(protocollo, idSA);
- }
- keyInfo.setPassword(apiKeyGenerated.getPassword());
- keyInfo.setApiKey(apiKeyGenerated.getApiKey());
- return keyInfo;
- }
- return null;
- }
- public static ApiKeyInfo getApiKey(ServizioApplicativo sa, boolean setApiKey) throws Exception {
- if(sa!=null && sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()>0) {
- Credenziali c = sa.getInvocazionePorta().getCredenziali(0);
- if(CredenzialeTipo.APIKEY.equals(c.getTipo())){
- ApiKeyInfo keyInfo = new ApiKeyInfo();
- keyInfo.setMultipleApiKeys(c.isAppId());
- keyInfo.setAppId(c.getUser());
- keyInfo.setPassword(c.getPassword());
- keyInfo.setCifrata(c.isCertificateStrictVerification());
- if(setApiKey) {
- if(c.isAppId()) {
- keyInfo.setApiKey(ApiKeyUtilities.encodeMultipleApiKey(c.getPassword()));
- }
- else {
- keyInfo.setApiKey(ApiKeyUtilities.encodeApiKey(c.getUser(), c.getPassword()));
- }
- }
- return keyInfo;
- }
- }
- return null;
- }
-
- /**
- * Trasforma le credenziali di autenticazione di un servizio applicativo nelle credenziali
- * di un'InvocazionePorta.
- * @throws UtilsException
- * @throws InstantiationException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- *
- */
- public static List<Credenziali> credenzialiFromAuth(OneOfBaseCredenzialiCredenziali cred, ApiKeyInfo keyInfo) throws IllegalAccessException, InvocationTargetException, InstantiationException, UtilsException {
-
- List<Credenziali> credenziali = null;
-
- if(cred!=null) {
-
- ModalitaAccessoEnum modalitaAccesso = cred.getModalitaAccesso();
- if(modalitaAccesso == null) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Modalità di accesso delle credenziali non indicata");
- }
-
- String tipoauthSA = Helper.tipoAuthSAFromModalita.get(modalitaAccesso.toString());
-
-
- if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)) {
- credenziali = new ArrayList<Credenziali>();
- Credenziali cre = new Credenziali();
- cre.setTipo(null);
- credenziali.add(cre);
- }
- else {
-
- credenziali = Helper.apiCredenzialiToGovwayCred(
- cred,
- modalitaAccesso,
- Credenziali.class,
- org.openspcoop2.core.config.constants.CredenzialeTipo.class,
- keyInfo
- );
-
- }
-
- }
-
- return credenziali;
- }
-
- /**
- * Trasforma le credenziali per un'InvocazionePorta nelle credenziali conservate in un applicativo.
- *
- * @param cred
- * @return
- * @throws NoSuchMethodException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- */
- public static OneOfBaseCredenzialiCredenziali authFromCredenziali(List<Credenziali> cred) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
-
- return Helper.govwayCredenzialiToApi(
- cred,
- Credenziali.class,
- org.openspcoop2.core.config.constants.CredenzialeTipo.class);
- }
-
-
- public static void checkApplicativoName(String nome) throws Exception {
- if (nome.equals(""))
- throw FaultCode.RICHIESTA_NON_VALIDA.toException(
- "Dati incompleti. E' necessario indicare: " + ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME
- );
-
- if (nome.indexOf(" ") != -1 || nome.indexOf('\"') != -1) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non inserire spazi o doppi apici nei campi di testo");
- }
-
- checkIntegrationEntityName(nome);
- checkLength255(nome, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
- }
-
-
- public static boolean isApplicativoDuplicato(ServizioApplicativo sa, ServiziApplicativiCore saCore) throws DriverConfigurazioneException {
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- IDSoggetto idSoggetto = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
- idSA.setIdSoggettoProprietario(idSoggetto);
- idSA.setNome(sa.getNome());
-
- return saCore.existsServizioApplicativo(idSA);
- }
-
-
- public static void checkIntegrationEntityName(String name) throws Exception{
- // Il nome deve contenere solo lettere e numeri e '_' '-' '.' '/'
- if (!RegularExpressionEngine.isMatch(name,"^[_A-Za-z][\\-\\._/A-Za-z0-9]*$")) {
-
- throw FaultCode.RICHIESTA_NON_VALIDA.toException(
- "Il campo '" +
- ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME +
- "' può iniziare solo con un carattere [A-Za-z] o il simbolo '_' e dev'essere formato solo da caratteri, cifre, '_' , '-'");
- }
- }
-
-
- public static void checkLength255(String value, String object) {
- checkLength(value, object, -1, 255);
- }
-
-
- public static void checkLength(String value, String object, int minLength, int maxLength) {
-
- boolean error = false;
-
- if(minLength>0) {
- if(value==null || value.length()<minLength) {
- error = true;
- }
- }
- if(maxLength>0) {
- if(value!=null && value.length()>maxLength) {
- error = true;
- }
- }
-
- if (error) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException(
- "L'informazione fornita nel campo " +
- object +
- " deve essere compresa fa " + Integer.toString(minLength) + " e " + Integer.toString(maxLength) +" caratteri"
- );
- }
-
- }
-
- public static final void checkNoDuplicateCred(
- ServizioApplicativo sa,
- List<ServizioApplicativo> saConflicts,
- SoggettiCore soggettiCore,
- TipoOperazione tipoOperazione ) throws DriverRegistroServiziNotFound, DriverRegistroServiziException
- {
- Soggetto soggettoToCheck = soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
- String portaDominio = soggettoToCheck.getPortaDominio();
-
- for (int i = 0; i < saConflicts.size(); i++) {
- ServizioApplicativo saConflict = saConflicts.get(i);
- // controllo se soggetto appartiene a nal diversi, in tal caso e' possibile avere stesse credenziali
- Soggetto tmpSoggettoProprietarioSa = soggettiCore.getSoggettoRegistro(saConflict.getIdSoggetto());
- if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
- continue;
-
- if (tipoOperazione == TipoOperazione.CHANGE && sa.getNome().equals(saConflict.getNome()) && (sa.getIdSoggetto().longValue() == saConflict.getIdSoggetto().longValue())) {
- continue;
- }
-
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Esistono gia' altri servizi applicativi che possiedono le credenziali indicate.");
- }
-
- }
-
- public static final ServizioApplicativo getServizioApplicativo(String nome, String soggetto, String tipo_protocollo, ServiziApplicativiCore saCore) throws ProtocolException, DriverConfigurazioneException {
- IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
- idServizioApplicativo.setIdSoggettoProprietario(ApplicativiApiHelper.getIDSoggetto(soggetto, tipo_protocollo));
- idServizioApplicativo.setNome(nome);
-
- return saCore.getServizioApplicativo(idServizioApplicativo);
- }
- public static List<IDPortaDelegata> getIdPorteDelegate(ServizioApplicativo oldSa, PorteDelegateCore pCore) throws DriverConfigurazioneException {
- FiltroRicercaPorteDelegate filtro = new FiltroRicercaPorteDelegate();
- filtro.setTipoSoggetto(oldSa.getTipoSoggettoProprietario());
- filtro.setNomeSoggetto(oldSa.getNomeSoggettoProprietario());
- filtro.setNomeServizioApplicativo(oldSa.getNome());
- return pCore.getAllIdPorteDelegate(filtro);
-
- }
- public static void checkServizioApplicativoInUso(ServizioApplicativo oldSa, SoggettiCore soggetiCore) throws DriverConfigurazioneNotFound, DriverConfigurazioneException {
-
- org.openspcoop2.core.config.Soggetto oldSogg = soggetiCore.getSoggetto(oldSa.getIdSoggetto());
- String nomeProv = oldSogg.getTipo() + "/" + oldSogg.getNome();
- boolean servizioApplicativoInUso = false;
-
- for (int i = 0; i < oldSogg.sizePortaDelegataList(); i++) {
- PortaDelegata pde = oldSogg.getPortaDelegata(i);
- for (int j = 0; j < pde.sizeServizioApplicativoList(); j++) {
- PortaDelegataServizioApplicativo tmpSA = pde.getServizioApplicativo(j);
- if (oldSa.getNome().equals(tmpSA.getNome())) {
- servizioApplicativoInUso = true;
- break;
- }
- }
- if (servizioApplicativoInUso)
- break;
- }
- if (!servizioApplicativoInUso) {
- for (int i = 0; i < oldSogg.sizePortaApplicativaList(); i++) {
- PortaApplicativa pa = oldSogg.getPortaApplicativa(i);
- for (int j = 0; j < pa.sizeServizioApplicativoList(); j++) {
- PortaApplicativaServizioApplicativo tmpSA = pa.getServizioApplicativo(j);
- if (oldSa.getNome().equals(tmpSA.getNome())) {
- servizioApplicativoInUso = true;
- break;
- }
- }
- if (servizioApplicativoInUso)
- break;
- }
- }
-
- if (servizioApplicativoInUso) {
- throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il Servizio Applicativo " + oldSa.getNome() + "è già stato associato ad alcune porte delegate e/o applicative del Soggetto " + nomeProv + ". Se si desidera modificare il Soggetto è necessario eliminare prima tutte le occorrenze del Servizio Applicativo");
- }
- }
- public static void validateProperties(ApplicativiEnv env, ProtocolProperties protocolProperties,
- ServizioApplicativo sa,
- ConsoleOperationType operationType) throws Exception {
- if(protocolProperties!=null) {
- try{
- ConsoleConfiguration consoleConf = getConsoleConfiguration(sa, env);
- env.saHelper.validaProtocolProperties(consoleConf, operationType, protocolProperties);
-
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- idSA.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
- idSA.setNome(sa.getNome());
-
- IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
- IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
- IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
- consoleDynamicConfiguration.updateDynamicConfigServizioApplicativo(consoleConf, operationType, env.saHelper, protocolProperties,
- registryReader, configRegistryReader, idSA);
-
- consoleDynamicConfiguration.validateDynamicConfigServizioApplicativo(consoleConf, operationType, env.saHelper, protocolProperties,
- registryReader, configRegistryReader, idSA);
-
- }catch(ProtocolException e){
- throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
- }
- }
-
- }
-
- }