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.pa;

  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.AbstractDatiInvocazione;
  27. import org.openspcoop2.pdd.core.token.EsitoDynamicDiscovery;
  28. import org.openspcoop2.pdd.core.token.EsitoGestioneToken;
  29. import org.openspcoop2.pdd.core.token.EsitoPresenzaToken;
  30. import org.openspcoop2.pdd.core.token.GestoreToken;
  31. import org.openspcoop2.pdd.core.token.InformazioniToken;
  32. import org.openspcoop2.pdd.core.token.TokenException;
  33. import org.openspcoop2.protocol.sdk.Busta;
  34. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  35. import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
  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 EsitoPresenzaTokenPortaApplicativa verificaPresenzaToken(DatiInvocazionePortaApplicativa datiInvocazione) {

  58.         EsitoPresenzaTokenPortaApplicativa esito = (EsitoPresenzaTokenPortaApplicativa) GestoreToken.verificaPosizioneToken(datiInvocazione, GestoreToken.PORTA_APPLICATIVA);
  59.        
  60.         if(esito.getEccezioneProcessamento()!=null) {
  61.             esito.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  62.         }
  63.         else if(!esito.isPresente() &&
  64.             esito.getErrorMessage()==null) {
  65.             esito.setErroreCooperazione(ErroriCooperazione.TOKEN_NON_PRESENTE.getErroreCooperazione());
  66.         }
  67.        
  68.         return esito;
  69.        
  70.     }
  71.    
  72.     public EsitoDynamicDiscoveryPortaApplicativa dynamicDiscovery(Busta busta, DatiInvocazionePortaApplicativa datiInvocazione, EsitoPresenzaToken token) throws TokenException {
  73.         try {
  74.            
  75.             EsitoDynamicDiscoveryPortaApplicativa esito = (EsitoDynamicDiscoveryPortaApplicativa) GestoreToken.dynamicDiscovery(this.log, datiInvocazione,
  76.                     this.pddContext, this.protocolFactory,
  77.                     token, GestoreToken.PORTA_APPLICATIVA,
  78.                     busta, getDominio(datiInvocazione), getServizio(datiInvocazione));
  79.            
  80.             if(esito.getEccezioneProcessamento()!=null) {
  81.                 esito.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  82.             }
  83.             else if(!esito.isValido() &&
  84.                 esito.getErrorMessage()==null) {
  85.                 esito.setErroreCooperazione(ErroriCooperazione.TOKEN_NON_VALIDO.getErroreCooperazione());
  86.             }
  87.            
  88.             return esito;
  89.            
  90.         }catch(Exception e) {
  91.             throw new TokenException(e.getMessage(),e); // errore di processamento
  92.         }
  93.     }
  94.    
  95.     public EsitoGestioneTokenPortaApplicativa validazioneJWTToken(Busta busta, DatiInvocazionePortaApplicativa datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {      
  96.         try {
  97.        
  98.             EsitoGestioneTokenPortaApplicativa esito = (EsitoGestioneTokenPortaApplicativa) GestoreToken.validazioneJWTToken(this.log, datiInvocazione,
  99.                     this.pddContext, this.protocolFactory,
  100.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_APPLICATIVA,
  101.                     busta, getDominio(datiInvocazione), getServizio(datiInvocazione));
  102.            
  103.             if(esito.getEccezioneProcessamento()!=null) {
  104.                 esito.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  105.             }
  106.             else if(!esito.isValido() &&
  107.                 esito.getErrorMessage()==null) {
  108.                 esito.setErroreCooperazione(ErroriCooperazione.TOKEN_NON_VALIDO.getErroreCooperazione());
  109.             }
  110.            
  111.             return esito;
  112.            
  113.         }catch(Exception e) {
  114.             throw new TokenException(e.getMessage(),e); // errore di processamento
  115.         }  
  116.     }
  117.    
  118.     public EsitoGestioneTokenPortaApplicativa introspectionToken(Busta busta, DatiInvocazionePortaApplicativa datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {
  119.         try {
  120.            
  121.             EsitoGestioneTokenPortaApplicativa esito = (EsitoGestioneTokenPortaApplicativa) GestoreToken.introspectionToken(this.log, datiInvocazione,
  122.                     this.pddContext, this.protocolFactory,
  123.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_APPLICATIVA,
  124.                     busta, getDominio(datiInvocazione), getServizio(datiInvocazione));
  125.            
  126.             if(esito.getEccezioneProcessamento()!=null) {
  127.                 esito.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  128.             }
  129.             else if(!esito.isValido() &&
  130.                 esito.getErrorMessage()==null) {
  131.                 esito.setErroreCooperazione(ErroriCooperazione.TOKEN_NON_VALIDO.getErroreCooperazione());
  132.             }
  133.            
  134.             return esito;
  135.            
  136.         }catch(Exception e) {
  137.             throw new TokenException(e.getMessage(),e); // errore di processamento
  138.         }
  139.     }
  140.    
  141.     public EsitoGestioneTokenPortaApplicativa userInfoToken(Busta busta, DatiInvocazionePortaApplicativa datiInvocazione, EsitoPresenzaToken token, EsitoDynamicDiscovery esitoDynamicDiscovery) throws TokenException {
  142.         try {
  143.            
  144.             EsitoGestioneTokenPortaApplicativa esito = (EsitoGestioneTokenPortaApplicativa) GestoreToken.userInfoToken(this.log, datiInvocazione,
  145.                     this.pddContext, this.protocolFactory,
  146.                     token, esitoDynamicDiscovery, GestoreToken.PORTA_APPLICATIVA,
  147.                     busta, getDominio(datiInvocazione), getServizio(datiInvocazione));
  148.            
  149.             if(esito.getEccezioneProcessamento()!=null) {
  150.                 esito.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  151.             }
  152.             else if(!esito.isValido() &&
  153.                 esito.getErrorMessage()==null) {
  154.                 esito.setErroreCooperazione(ErroriCooperazione.TOKEN_NON_VALIDO.getErroreCooperazione());
  155.             }
  156.            
  157.             return esito;
  158.            
  159.         }catch(Exception e) {
  160.             throw new TokenException(e.getMessage(),e); // errore di processamento
  161.         }
  162.     }
  163.    
  164.     public void forwardToken(AbstractDatiInvocazione datiInvocazione, EsitoPresenzaTokenPortaApplicativa esitoPresenzaToken,
  165.             EsitoGestioneToken esitoValidazioneJWT, EsitoGestioneToken esitoIntrospection, EsitoGestioneToken esitoUserInfo,
  166.             InformazioniToken informazioniTokenNormalizzate,
  167.             Busta busta) throws TokenException {
  168.         try {
  169.            
  170.             GestoreToken.forwardToken(this.log, this.idTransazione,
  171.                     datiInvocazione, esitoPresenzaToken,
  172.                     esitoValidazioneJWT, esitoIntrospection, esitoUserInfo,
  173.                     informazioniTokenNormalizzate,
  174.                     GestoreToken.PORTA_APPLICATIVA,
  175.                     this.pddContext, busta);
  176.            
  177.         }catch(Exception e) {
  178.             throw new TokenException(e.getMessage(),e); // errore di processamento
  179.         }
  180.     }
  181.    
  182.     private IDSoggetto getDominio(DatiInvocazionePortaApplicativa datiInvocazione) {
  183.         IDSoggetto soggetto = null;
  184.         if(datiInvocazione.getPa()!=null) {
  185.             soggetto = new IDSoggetto(datiInvocazione.getPa().getTipoSoggettoProprietario(), datiInvocazione.getPa().getNomeSoggettoProprietario());
  186.         }
  187.         else if(datiInvocazione.getPd()!=null) {
  188.             soggetto = new IDSoggetto(datiInvocazione.getPd().getTipoSoggettoProprietario(), datiInvocazione.getPd().getNomeSoggettoProprietario());
  189.         }
  190.         return soggetto;
  191.     }
  192.     private IDServizio getServizio(DatiInvocazionePortaApplicativa datiInvocazione) throws DriverRegistroServiziException {
  193.         IDServizio servizio = null;
  194.         if(datiInvocazione.getPa()!=null) {
  195.             servizio = IDServizioFactory.getInstance().getIDServizioFromValues(datiInvocazione.getPa().getServizio().getTipo(), datiInvocazione.getPa().getServizio().getNome(),
  196.                     datiInvocazione.getPa().getTipoSoggettoProprietario(), datiInvocazione.getPa().getNomeSoggettoProprietario(),
  197.                     datiInvocazione.getPa().getServizio().getVersione());
  198.         }
  199.         else if(datiInvocazione.getPd()!=null) {
  200.             servizio = IDServizioFactory.getInstance().getIDServizioFromValues(datiInvocazione.getPd().getServizio().getTipo(), datiInvocazione.getPd().getServizio().getNome(),
  201.                     datiInvocazione.getPd().getSoggettoErogatore().getTipo(), datiInvocazione.getPd().getSoggettoErogatore().getNome(),
  202.                     datiInvocazione.getPd().getServizio().getVersione());
  203.         }
  204.         return servizio;
  205.     }
  206. }