AutorizzazioneAuthenticated.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.pdd.core.autorizzazione.pa;

  21. import org.openspcoop2.core.id.IDServizio;
  22. import org.openspcoop2.core.id.IDServizioApplicativo;
  23. import org.openspcoop2.core.id.IDSoggetto;
  24. import org.openspcoop2.core.registry.driver.DriverRegistroServiziServizioNotFound;
  25. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  26. import org.openspcoop2.pdd.core.CostantiPdD;
  27. import org.openspcoop2.pdd.core.credenziali.Credenziali;
  28. import org.openspcoop2.protocol.engine.constants.Costanti;
  29. import org.openspcoop2.protocol.registry.EsitoAutorizzazioneRegistro;
  30. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  31. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  32. import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
  33. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;

  34. /**
  35.  * Interfaccia che definisce un processo di autorizzazione per i soggetti.
  36.  *
  37.  * @author Andrea Poli (apoli@link.it)
  38.  * @author $Author$
  39.  * @version $Rev$, $Date$
  40.  */

  41. public class AutorizzazioneAuthenticated extends AbstractAutorizzazioneBase {

  42.     @Override
  43.     public EsitoAutorizzazionePortaApplicativa process(DatiInvocazionePortaApplicativa datiInvocazione){
  44.        
  45.         EsitoAutorizzazionePortaApplicativa esito = new EsitoAutorizzazionePortaApplicativa();
  46.        
  47.         try{
  48.             RegistroServiziManager reg = RegistroServiziManager.getInstance(datiInvocazione.getState());
  49.             ConfigurazionePdDManager config = ConfigurazionePdDManager.getInstance(datiInvocazione.getState());
  50.            
  51.             Credenziali credenzialiPdDMittente = datiInvocazione.getCredenzialiPdDMittente();
  52.             String pdd = null;
  53.             if(credenzialiPdDMittente!=null){
  54.                 if(credenzialiPdDMittente.getSubject()!=null){
  55.                     pdd = credenzialiPdDMittente.getSubject();
  56.                 }
  57.             }
  58.            
  59.             IDServizioApplicativo idSA = null;
  60.             String identitaServizioApplicativoFruitore = null;
  61.             if(!Costanti.MODIPA_PROTOCOL_NAME.equals(this.getProtocolFactory().getProtocol())) {  // su ModI la verifica di autorizzazione viene fatta tramite la validazione semantica
  62.                 idSA = datiInvocazione.getIdentitaServizioApplicativoFruitore();
  63.             }
  64.             if(idSA!=null){
  65.                 identitaServizioApplicativoFruitore = idSA.getNome();
  66.             }
  67.            
  68.             IDSoggetto idSoggetto = datiInvocazione.getIdSoggettoFruitore();
  69.             if(Costanti.MODIPA_PROTOCOL_NAME.equals(this.getProtocolFactory().getProtocol()) && this.getPddContext()!=null && this.getPddContext().containsKey(CostantiPdD.INTERMEDIARIO)) {
  70.                 idSoggetto = (IDSoggetto) this.getPddContext().get(CostantiPdD.INTERMEDIARIO);
  71.             }
  72.             IDServizio idServizio = datiInvocazione.getIdServizio();
  73.            
  74.             boolean autorizzazioneSoggettiMittenti = config.autorizzazione(datiInvocazione.getPa(), idSoggetto);
  75.             boolean autorizzazioneApplicativiMittenti = false;
  76.             if(this.getProtocolFactory().createProtocolConfiguration().isSupportoAutenticazioneApplicativiErogazioni() &&
  77.                     !Costanti.MODIPA_PROTOCOL_NAME.equals(this.getProtocolFactory().getProtocol())) {  // su ModI la verifica di autorizzazione viene fatta tramite la validazione semantica
  78.                 autorizzazioneApplicativiMittenti = config.autorizzazione(datiInvocazione.getPa(), datiInvocazione.getIdentitaServizioApplicativoFruitore());
  79.             }
  80.            
  81.             if(!autorizzazioneSoggettiMittenti && !autorizzazioneApplicativiMittenti) {
  82.                 String errore = AbstractAutorizzazioneBase.getErrorString(idSA, idSoggetto, idServizio);
  83.                 esito.setErroreCooperazione(IntegrationFunctionError.AUTHORIZATION_DENY, ErroriCooperazione.AUTORIZZAZIONE_FALLITA.getErroreAutorizzazione(errore, CodiceErroreCooperazione.SICUREZZA_AUTORIZZAZIONE_FALLITA));
  84.                 esito.setAutorizzato(false);
  85.             }
  86.             else {
  87.            
  88.                 boolean isSupportoAutenticazioneSoggetti = this.getProtocolFactory().createProtocolConfiguration().isSupportoAutenticazioneSoggetti();
  89.                 boolean isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazioni = this.getProtocolFactory().createProtocolConfiguration().isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazioni();
  90.                
  91.                 if(isSupportoAutenticazioneSoggetti && !isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazioni) {
  92.                    
  93.                     esito.setAutorizzato(true);
  94.                
  95.                 }
  96.                 else {
  97.                    
  98.                     // VERIFICARE ANTI-SPOOFING (Tramite PDD)
  99.                    
  100.                     EsitoAutorizzazioneRegistro esitoAutorizzazione = reg.isFruitoreServizioAutorizzato(pdd, identitaServizioApplicativoFruitore, idSoggetto, idServizio);
  101.                     if(!esitoAutorizzazione.isServizioAutorizzato()){
  102.                         String errore = AbstractAutorizzazioneBase.getErrorString(idSA, idSoggetto, idServizio);
  103.                         if(esitoAutorizzazione.getDetails()!=null){
  104.                             errore = errore + " ("+esitoAutorizzazione.getDetails()+")";
  105.                         }
  106.                         esito.setErroreCooperazione(IntegrationFunctionError.AUTHORIZATION_DENY, ErroriCooperazione.AUTORIZZAZIONE_FALLITA.getErroreAutorizzazione(errore, CodiceErroreCooperazione.SICUREZZA_AUTORIZZAZIONE_FALLITA));
  107.                         esito.setAutorizzato(false);
  108.                     }else{
  109.                         esito.setAutorizzato(true);
  110.                         if(esitoAutorizzazione.getDetails()!=null){
  111.                             esito.setDetails(esitoAutorizzazione.getDetails());
  112.                         }
  113.                     }
  114.                 }
  115.                
  116.             }
  117.         }catch(DriverRegistroServiziServizioNotFound e){
  118.             esito.setErroreCooperazione(IntegrationFunctionError.NOT_FOUND, ErroriCooperazione.SERVIZIO_SCONOSCIUTO.
  119.                     getErroreCooperazione("Errore durante il processo di autorizzazione (ServizioNotFound): "+e.getMessage()));
  120.             esito.setAutorizzato(false);
  121.             esito.setEccezioneProcessamento(e);
  122.         }catch(Exception e){
  123.             String errore = "Errore durante il processo di autorizzazione: "+e.getMessage();
  124.             esito.setErroreCooperazione(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, ErroriCooperazione.AUTORIZZAZIONE_FALLITA.getErroreAutorizzazione(errore, CodiceErroreCooperazione.SICUREZZA));
  125.             esito.setAutorizzato(false);
  126.             esito.setEccezioneProcessamento(e);
  127.         }
  128.        
  129.         return esito;
  130.     }
  131.    
  132. }