GestioneToken.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.token.pd;

  21. import org.openspcoop2.core.id.IDServizio;
  22. import org.openspcoop2.core.id.IDSoggetto;
  23. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  24. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  25. import org.openspcoop2.pdd.core.PdDContext;
  26. import org.openspcoop2.pdd.core.token.EsitoDynamicDiscovery;
  27. import org.openspcoop2.pdd.core.token.EsitoGestioneToken;
  28. import org.openspcoop2.pdd.core.token.EsitoPresenzaToken;
  29. import org.openspcoop2.pdd.core.token.GestoreToken;
  30. import org.openspcoop2.pdd.core.token.InformazioniToken;
  31. import org.openspcoop2.pdd.core.token.TokenException;
  32. import org.openspcoop2.protocol.sdk.Busta;
  33. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  34. import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
  35. import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
  36. import org.slf4j.Logger;

  37. /**
  38.  * Classe che implementala gestione token
  39.  *
  40.  * @author Andrea Poli (apoli@link.it)
  41.  * @author $Author$
  42.  * @version $Rev$, $Date$
  43.  */

  44. public class GestioneToken {

  45.     private Logger log;
  46.     private String idTransazione;
  47.     private PdDContext pddContext;
  48.     private IProtocolFactory<?> protocolFactory;
  49.     public GestioneToken(Logger log, String idTransazione,
  50.             PdDContext pddContext, IProtocolFactory<?> protocolFactory) {
  51.         this.log = log;
  52.         this.idTransazione = idTransazione;
  53.         this.pddContext = pddContext;
  54.         this.protocolFactory = protocolFactory;
  55.     }
  56.    
  57.     public EsitoPresenzaTokenPortaDelegata verificaPresenzaToken(DatiInvocazionePortaDelegata datiInvocazione) {

  58.         EsitoPresenzaTokenPortaDelegata esito = (EsitoPresenzaTokenPortaDelegata) GestoreToken.verificaPosizioneToken(datiInvocazione, GestoreToken.PORTA_DELEGATA);
  59.        
  60.         if(esito.getEccezioneProcessamento()!=null) {
  61.             esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  62.                     get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_560_GESTIONE_TOKEN));
  63.         }
  64.         else if(!esito.isPresente() &&
  65.             esito.getErrorMessage()==null) {
  66.             esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_443_TOKEN_NON_PRESENTE.getErroreIntegrazione());
  67.         }
  68.        
  69.         return esito;
  70.        
  71.     }
  72.    
  73.     public EsitoDynamicDiscoveryPortaDelegata dynamicDiscovery(DatiInvocazionePortaDelegata datiInvocazione, EsitoPresenzaToken token) throws TokenException {
  74.         try {
  75.            
  76.             IDSoggetto soggettoFruitore = getDominio(datiInvocazione);
  77.             IDServizio idServizio = getServizio(datiInvocazione);
  78.             Busta busta = getBusta(datiInvocazione, soggettoFruitore, idServizio);
  79.            
  80.             EsitoDynamicDiscoveryPortaDelegata esito = (EsitoDynamicDiscoveryPortaDelegata) GestoreToken.dynamicDiscovery(this.log, datiInvocazione,
  81.                     this.pddContext, this.protocolFactory,
  82.                     token, GestoreToken.PORTA_DELEGATA,
  83.                     busta, soggettoFruitore, idServizio);
  84.            
  85.             if(esito.getEccezioneProcessamento()!=null) {
  86.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  87.                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_560_GESTIONE_TOKEN));
  88.             }
  89.             else if(!esito.isValido() &&
  90.                 esito.getErrorMessage()==null) {
  91.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_444_TOKEN_NON_VALIDO.getErroreIntegrazione());
  92.             }
  93.            
  94.             return esito;
  95.            
  96.         }catch(Exception e) {
  97.             throw new TokenException(e.getMessage(),e); // errore di processamento
  98.         }
  99.     }
  100.    
  101.     public EsitoGestioneTokenPortaDelegata validazioneJWTToken(DatiInvocazionePortaDelegata datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {    
  102.         try {
  103.        
  104.             IDSoggetto soggettoFruitore = getDominio(datiInvocazione);
  105.             IDServizio idServizio = getServizio(datiInvocazione);
  106.             Busta busta = getBusta(datiInvocazione, soggettoFruitore, idServizio);
  107.            
  108.             EsitoGestioneTokenPortaDelegata esito = (EsitoGestioneTokenPortaDelegata) GestoreToken.validazioneJWTToken(this.log, datiInvocazione,
  109.                     this.pddContext, this.protocolFactory,
  110.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_DELEGATA,
  111.                     busta, soggettoFruitore, idServizio);
  112.            
  113.             if(esito.getEccezioneProcessamento()!=null) {
  114.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  115.                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_560_GESTIONE_TOKEN));
  116.             }
  117.             else if(!esito.isValido() &&
  118.                 esito.getErrorMessage()==null) {
  119.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_444_TOKEN_NON_VALIDO.getErroreIntegrazione());
  120.             }
  121.            
  122.             return esito;
  123.            
  124.         }catch(Exception e) {
  125.             throw new TokenException(e.getMessage(),e); // errore di processamento
  126.         }  
  127.     }
  128.    
  129.     public EsitoGestioneTokenPortaDelegata introspectionToken(DatiInvocazionePortaDelegata datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {
  130.         try {
  131.            
  132.             IDSoggetto soggettoFruitore = getDominio(datiInvocazione);
  133.             IDServizio idServizio = getServizio(datiInvocazione);
  134.             Busta busta = getBusta(datiInvocazione, soggettoFruitore, idServizio);
  135.            
  136.             EsitoGestioneTokenPortaDelegata esito = (EsitoGestioneTokenPortaDelegata) GestoreToken.introspectionToken(this.log, datiInvocazione,
  137.                     this.pddContext, this.protocolFactory,
  138.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_DELEGATA,
  139.                     busta, soggettoFruitore, idServizio);
  140.            
  141.             if(esito.getEccezioneProcessamento()!=null) {
  142.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  143.                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_560_GESTIONE_TOKEN));
  144.             }
  145.             else if(!esito.isValido() &&
  146.                 esito.getErrorMessage()==null) {
  147.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_444_TOKEN_NON_VALIDO.getErroreIntegrazione());
  148.             }
  149.            
  150.             return esito;
  151.            
  152.         }catch(Exception e) {
  153.             throw new TokenException(e.getMessage(),e); // errore di processamento
  154.         }
  155.     }
  156.    
  157.     public EsitoGestioneTokenPortaDelegata userInfoToken(DatiInvocazionePortaDelegata datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {
  158.         try {
  159.            
  160.             IDSoggetto soggettoFruitore = getDominio(datiInvocazione);
  161.             IDServizio idServizio = getServizio(datiInvocazione);
  162.             Busta busta = getBusta(datiInvocazione, soggettoFruitore, idServizio);
  163.            
  164.             EsitoGestioneTokenPortaDelegata esito = (EsitoGestioneTokenPortaDelegata) GestoreToken.userInfoToken(this.log, datiInvocazione,
  165.                     this.pddContext, this.protocolFactory,
  166.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_DELEGATA,
  167.                     busta, soggettoFruitore, idServizio);
  168.            
  169.             if(esito.getEccezioneProcessamento()!=null) {
  170.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  171.                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_560_GESTIONE_TOKEN));
  172.             }
  173.             else if(!esito.isValido() &&
  174.                 esito.getErrorMessage()==null) {
  175.                 esito.setErroreIntegrazione(ErroriIntegrazione.ERRORE_444_TOKEN_NON_VALIDO.getErroreIntegrazione());
  176.             }
  177.            
  178.             return esito;
  179.            
  180.         }catch(Exception e) {
  181.             throw new TokenException(e.getMessage(),e); // errore di processamento
  182.         }
  183.     }
  184.    
  185.     public void forwardToken(DatiInvocazionePortaDelegata datiInvocazione, EsitoPresenzaTokenPortaDelegata esitoPresenzaToken,
  186.             EsitoGestioneToken esitoValidazioneJWT, EsitoGestioneToken esitoIntrospection, EsitoGestioneToken esitoUserInfo,
  187.             InformazioniToken informazioniTokenNormalizzate) throws TokenException {
  188.         try {
  189.            
  190.             IDSoggetto soggettoFruitore = getDominio(datiInvocazione);
  191.             IDServizio idServizio = getServizio(datiInvocazione);
  192.             Busta busta = getBusta(datiInvocazione, soggettoFruitore, idServizio);
  193.            
  194.             GestoreToken.forwardToken(this.log, this.idTransazione,
  195.                     datiInvocazione, esitoPresenzaToken,
  196.                     esitoValidazioneJWT, esitoIntrospection, esitoUserInfo,
  197.                     informazioniTokenNormalizzate,
  198.                     GestoreToken.PORTA_DELEGATA,
  199.                     this.pddContext, busta);
  200.            
  201.         }catch(Exception e) {
  202.             throw new TokenException(e.getMessage(),e); // errore di processamento
  203.         }
  204.     }
  205.    
  206.     private IDSoggetto getDominio(DatiInvocazionePortaDelegata datiInvocazione) {
  207.         IDSoggetto soggetto = null;
  208.         if(datiInvocazione.getPd()!=null) {
  209.             soggetto = new IDSoggetto(datiInvocazione.getPd().getTipoSoggettoProprietario(), datiInvocazione.getPd().getNomeSoggettoProprietario());
  210.         }
  211.         return soggetto;
  212.     }
  213.     private IDServizio getServizio(DatiInvocazionePortaDelegata datiInvocazione) throws DriverRegistroServiziException {
  214.         IDServizio servizio = null;
  215.         if(datiInvocazione.getPd()!=null) {
  216.             servizio = IDServizioFactory.getInstance().getIDServizioFromValues(datiInvocazione.getPd().getServizio().getTipo(), datiInvocazione.getPd().getServizio().getNome(),
  217.                     datiInvocazione.getPd().getSoggettoErogatore().getTipo(), datiInvocazione.getPd().getSoggettoErogatore().getNome(),
  218.                     datiInvocazione.getPd().getServizio().getVersione());
  219.         }
  220.         return servizio;
  221.     }
  222.    
  223.     private Busta getBusta(DatiInvocazionePortaDelegata datiInvocazione, IDSoggetto soggettoFruitore, IDServizio idServizio) {
  224.         Busta busta = new Busta(this.protocolFactory.getProtocol());
  225.         if(soggettoFruitore!=null) {
  226.             busta.setTipoMittente(soggettoFruitore.getTipo());
  227.             busta.setMittente(soggettoFruitore.getNome());
  228.         }
  229.         if(idServizio!=null) {
  230.             if(idServizio.getSoggettoErogatore()!=null) {
  231.                 busta.setTipoDestinatario(idServizio.getSoggettoErogatore().getTipo());
  232.                 busta.setDestinatario(idServizio.getSoggettoErogatore().getNome());
  233.             }
  234.             busta.setTipoServizio(idServizio.getTipo());
  235.             busta.setServizio(idServizio.getNome());
  236.             busta.setVersioneServizio(idServizio.getVersione());
  237.             if(datiInvocazione.getRequestInfo()!=null && datiInvocazione.getRequestInfo().getIdServizio()!=null) {
  238.                 busta.setAzione(datiInvocazione.getRequestInfo().getIdServizio().getAzione());
  239.             }
  240.         }
  241.         return busta;
  242.     }
  243.  
  244. }