AutorizzazioneSignalHubPush.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.protocol.modipa.authorization;

  21. import java.util.List;

  22. import org.openspcoop2.core.config.Ruolo;
  23. import org.openspcoop2.core.registry.ProtocolProperty;
  24. import org.openspcoop2.pdd.core.PdDContext;
  25. import org.openspcoop2.pdd.core.autorizzazione.pd.AbstractAutorizzazioneBase;
  26. import org.openspcoop2.pdd.core.autorizzazione.pd.DatiInvocazionePortaDelegata;
  27. import org.openspcoop2.pdd.core.autorizzazione.pd.EsitoAutorizzazionePortaDelegata;
  28. import org.openspcoop2.protocol.modipa.config.ModIProperties;
  29. import org.openspcoop2.protocol.modipa.constants.ModICostanti;
  30. import org.openspcoop2.protocol.modipa.utils.SignalHubUtils;
  31. import org.openspcoop2.protocol.sdk.ProtocolException;
  32. import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
  33. import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
  34. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  35. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;

  36. /**
  37.  * Interfaccia che definisce un processo di autorizzazione sui token
  38.  *
  39.  * @author Tommaso Burlon (tommaso.burlon@link.it)
  40.  * @author $Author$
  41.  * @version $Rev$, $Date$
  42.  */

  43. public class AutorizzazioneSignalHubPush extends AbstractAutorizzazioneBase {

  44.     private static final String GENERIC_ERROR = "Errore di processamento dell'autorizzazione signal hub";
  45.     private static final String ROLE_SERVICE_UNRECOGNIZED = "L'applicativo autenticato non è configurato come pubblicatore del servizio indicato, né tramite assegnazione diretta né mediante ruolo associato";
  46.    
  47.     @Override
  48.     public boolean saveAuthorizationResultInCache() {
  49.         return false;
  50.     }
  51.    
  52.     @Override
  53.     public EsitoAutorizzazionePortaDelegata process(DatiInvocazionePortaDelegata datiInvocazione){      
  54.         try {
  55.             // controllo che signalhub sia abilitato
  56.             ModIProperties modiProperties = ModIProperties.getInstance();
  57.             if(!modiProperties.isSignalHubEnabled()) {
  58.                 throw new ProtocolException("La funzionalità SignalHub non è attiva");
  59.             }
  60.            
  61.             return this.processEngine(datiInvocazione);
  62.         } catch (ProtocolException e) {
  63.             return buildConfigurazioneNonDisponibile(null, e);
  64.         }
  65.     }
  66.    
  67.     private EsitoAutorizzazionePortaDelegata buildConfigurazioneNonDisponibile(String descrizioneErrore, Exception e) {
  68.         EsitoAutorizzazionePortaDelegata esito = new EsitoAutorizzazionePortaDelegata();
  69.         esito.setErroreIntegrazione(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  70.                 descrizioneErrore!=null ?
  71.                          ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(descrizioneErrore, CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE)
  72.                         :
  73.                              ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
  74.         esito.setAutorizzato(false);
  75.         esito.setDetails(GENERIC_ERROR);
  76.         esito.setEccezioneProcessamento(e);
  77.         return esito;
  78.     }
  79.    
  80.     public EsitoAutorizzazionePortaDelegata processEngine(DatiInvocazionePortaDelegata datiInvocazione) throws ProtocolException {
  81.         EsitoAutorizzazionePortaDelegata esito = new EsitoAutorizzazionePortaDelegata();
  82.        
  83.         PdDContext context = datiInvocazione.getPddContext();
  84.        
  85.         // ottengo le proprieta del protocollo per avere gli applicativi/ruoli autorizzati
  86.         List<ProtocolProperty> eServiceProperties = SignalHubUtils.obtainSignalHubProtocolProperty(context);
  87.        
  88.         String allowedService = null;
  89.         try {
  90.             allowedService = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(eServiceProperties, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_SA_ID);
  91.         }catch(Exception e) {
  92.             if(getProtocolFactory().getLogger()!=null) {
  93.                 getProtocolFactory().getLogger().error("Configurazione SignalHub non fornita per il servizio indicato: "+e.getMessage(),e);
  94.             }
  95.             return buildConfigurazioneNonDisponibile("Configurazione SignalHub non fornita per il servizio indicato", e);
  96.         }
  97.         String allowedRole = null;
  98.         try {
  99.             allowedRole = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(eServiceProperties, ModICostanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_ROLE_ID);
  100.         }catch(Exception e) {
  101.             if(getProtocolFactory().getLogger()!=null) {
  102.                 getProtocolFactory().getLogger().error("Configurazione SignalHub non fornita per il servizio indicato: "+e.getMessage(),e);
  103.             }
  104.             return buildConfigurazioneNonDisponibile("Configurazione SignalHub non fornita per il servizio indicato", e);
  105.         }
  106.            

  107.         List<Ruolo> roles = List.of();
  108.        
  109.         // controllo se sono presenti ruoli nel servizio applicativo
  110.         if (datiInvocazione.getServizioApplicativo() != null &&
  111.             datiInvocazione.getServizioApplicativo().getInvocazionePorta() != null &&
  112.             datiInvocazione.getServizioApplicativo().getInvocazionePorta().getRuoli() != null)
  113.             roles = datiInvocazione.getServizioApplicativo().getInvocazionePorta().getRuoli().getRuoloList();
  114.        
  115.         // controllo se sono presenti ruoli autorizzati
  116.         for (Ruolo role : roles) {
  117.             if (role.getNome().equals(allowedRole)) {
  118.                 esito.setAutorizzato(true);
  119.                 return esito;
  120.             }
  121.         }
  122.        
  123.         // controllo se l'applicativo e' autorizzato
  124.         if (datiInvocazione.getIdServizioApplicativo() == null) {
  125.             esito.setAutorizzato(false);
  126.             esito.setErroreIntegrazione(IntegrationFunctionError.AUTHORIZATION_DENY, ErroriIntegrazione.ERRORE_410_AUTENTICAZIONE_RICHIESTA.getErroreIntegrazione());
  127.             /**esito.setDetails(ROLE_SERVICE_UNRECOGNIZED);*/
  128.            
  129.         } else if (!allowedService.equals(datiInvocazione.getIdServizioApplicativo().getNome())) {
  130.             esito.setAutorizzato(false);
  131.             esito.setErroreIntegrazione(IntegrationFunctionError.AUTHORIZATION_DENY, ErroriIntegrazione.ERRORE_404_AUTORIZZAZIONE_FALLITA_SA.getErrore404_AutorizzazioneFallitaServizioApplicativo(datiInvocazione.getIdServizioApplicativo().getNome()));
  132.             esito.setDetails(ROLE_SERVICE_UNRECOGNIZED);
  133.         } else {
  134.             esito.setAutorizzato(true);
  135.         }
  136.        
  137.         return esito;
  138.     }
  139.    
  140. }