PreInRequestHandler.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.sdi.utils;

  21. import java.util.Map;

  22. import org.openspcoop2.core.constants.TipoPdD;
  23. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  24. import org.openspcoop2.pdd.core.handlers.HandlerException;
  25. import org.openspcoop2.pdd.core.handlers.PreInRequestContext;
  26. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  27. import org.openspcoop2.pdd.services.connector.messages.ConnectorInMessage;
  28. import org.openspcoop2.protocol.sdi.constants.SDICostanti;
  29. import org.openspcoop2.protocol.sdi.constants.SDICostantiServizioRiceviFile;
  30. import org.openspcoop2.protocol.sdi.constants.SDICostantiServizioRiceviNotifica;
  31. import org.openspcoop2.protocol.sdk.state.URLProtocolContext;

  32. /**
  33.  * PreInRequestHandler
  34.  *
  35.  * @author Andrea Poli (apoli@link.it)
  36.  * @author $Author$
  37.  * @version $Rev$, $Date$
  38.  */
  39. public class PreInRequestHandler implements org.openspcoop2.pdd.core.handlers.PreInRequestHandler {

  40.     @Override
  41.     public void invoke(PreInRequestContext context) throws HandlerException {
  42.        
  43.         try{
  44.        
  45.             if(!TipoPdD.DELEGATA.equals(context.getTipoPorta())){
  46.                 return;
  47.             }
  48.                        
  49.             if(context.getTransportContext()==null){
  50.                 return;
  51.             }
  52.            
  53.             Map<String, Object> transportContext = context.getTransportContext();
  54.             Object inMessageObject = transportContext.get(PreInRequestContext.SERVLET_REQUEST);
  55.             if(inMessageObject==null || (!(inMessageObject instanceof ConnectorInMessage))){
  56.                 return;
  57.             }
  58.            
  59.             ConnectorInMessage inMessage = (ConnectorInMessage) inMessageObject;
  60.             if(inMessage.getURLProtocolContext()==null){
  61.                 return;
  62.             }
  63.            
  64.             if(!URLProtocolContext.PDtoSOAP_FUNCTION.equals(inMessage.getURLProtocolContext().getFunction()) &&
  65.                     !URLProtocolContext.PDtoSOAP_FUNCTION_GOVWAY.equals(inMessage.getURLProtocolContext().getFunction())){
  66.                 return;
  67.             }
  68.             if(!SDICostanti.SDI_PROTOCOL_NAME.equals(inMessage.getURLProtocolContext().getProtocolName())){
  69.                 return;
  70.             }
  71.            
  72.             // Appendo l'azione dopo la versione
  73.             String sdiFatturazioneAttiva = "/"+SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE+"/";
  74.             String sdiFatturazioneAttivaConTipo = "/sdi_"+SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE+"/";
  75.             boolean attiva = false;
  76.             String sdiFatturazionePassiva = "/"+SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA+"/";
  77.             String sdiFatturazionePassivaConTipo = "/sdi_"+SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA+"/";
  78.             @SuppressWarnings("unused")
  79.             boolean passiva = false;
  80.             if( inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazioneAttiva)
  81.                     ||
  82.                 inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazioneAttivaConTipo)){
  83.                 String requestUri = inMessage.getURLProtocolContext().getRequestURI();
  84.                 String params =  inMessage.getURLProtocolContext().getFunctionParameters();
  85.                 if(requestUri.endsWith("/")==false) {
  86.                     requestUri = requestUri + "/";
  87.                 }
  88.                 if(params.endsWith("/")==false) {
  89.                     params = params + "/";
  90.                 }
  91.                 requestUri = requestUri + SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE_AZIONE_RICEVI_FILE;
  92.                 params = params + SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE_AZIONE_RICEVI_FILE;
  93.                 inMessage.getURLProtocolContext().setRequestURI(requestUri);
  94.                 inMessage.getURLProtocolContext().setFunctionParameters(params);
  95.                 attiva = true;
  96.             }
  97.             else if( inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazionePassiva)
  98.                     ||
  99.                     inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazionePassivaConTipo)){
  100.                 String requestUri = inMessage.getURLProtocolContext().getRequestURI();
  101.                 String params =  inMessage.getURLProtocolContext().getFunctionParameters();
  102.                 if(requestUri.endsWith("/")==false) {
  103.                     requestUri = requestUri + "/";
  104.                 }
  105.                 if(params.endsWith("/")==false) {
  106.                     params = params + "/";
  107.                 }
  108.                 requestUri = requestUri + SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_NOTIFICA_ESITO_AZIONE_NOTIFICA_ESITO;
  109.                 params = params + SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_NOTIFICA_ESITO_AZIONE_NOTIFICA_ESITO;
  110.                 inMessage.getURLProtocolContext().setRequestURI(requestUri);
  111.                 inMessage.getURLProtocolContext().setFunctionParameters(params);
  112.                 passiva = true;
  113.             }
  114.             else {
  115.                 return;
  116.             }
  117.            
  118.             if(attiva) {
  119.                 String valoreUrl = null;
  120.                 if(inMessage.getURLProtocolContext().getParameters()!=null &&
  121.                         inMessage.getURLProtocolContext().getParameters().size()>0){
  122.                     valoreUrl = inMessage.getURLProtocolContext().getParameterFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_URLBASED_TIPO_FILE);
  123.                 }
  124.                
  125.                 String valoreHeader = null;
  126.                 if(inMessage.getURLProtocolContext().getHeaders()!=null &&
  127.                         inMessage.getURLProtocolContext().getHeaders().size()>0){
  128.                     valoreHeader = inMessage.getURLProtocolContext().getHeaderFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_TRASPORTO_TIPO_FILE_1);
  129.                     if(valoreHeader==null){
  130.                         valoreHeader = inMessage.getURLProtocolContext().getHeaderFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_TRASPORTO_TIPO_FILE_2);
  131.                     }
  132.                 }
  133.                
  134.                 if(valoreUrl==null && valoreHeader==null){
  135.                     //return;
  136.                     // Bug Fix: OP-752
  137.                     // forzo xml che gestiro' comunque come attachment
  138.                     valoreHeader = SDICostanti.SDI_TIPO_FATTURA_XML;
  139.                 }
  140.                 String valore = null;
  141.                 if(valoreUrl!=null){
  142.                     valore = valoreUrl;
  143.                 }
  144.                 else{
  145.                     valore = valoreHeader;
  146.                 }
  147.                
  148.                 boolean imbustamentoSOAP = false;
  149.                 if(SDICostanti.SDI_TIPO_FATTURA_ZIP.equalsIgnoreCase(valore)){
  150.                     imbustamentoSOAP = true;
  151.                 }
  152.                 else if(SDICostanti.SDI_TIPO_FATTURA_P7M.equalsIgnoreCase(valore)){
  153.                     imbustamentoSOAP = true;
  154.                 }
  155.                
  156.                 // Bug Fix: OP-752
  157.                 // USO Comunque il tunnel SOAP altrimenti l'xml viene modificato e la firma non e' piu' valida
  158.                 // Uso esattamente il codice sopra con il contentType per zip e p7m:
  159.                 imbustamentoSOAP = true;
  160.                
  161.                 if(imbustamentoSOAP){
  162.                     OpenSPCoop2Properties openSPCoopProperties = OpenSPCoop2Properties.getInstance();
  163.                     context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWord_urlBased(), "true");
  164.                     context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWordMimeType_urlBased(),"application/octet-stream");
  165.                 }
  166.             }
  167.             else if(passiva) {
  168.                 // Bug Fix: OP-752
  169.                 // USO Comunque il tunnel SOAP altrimenti l'xml viene modificato e la firma non e' piu' valida
  170.                 // Le notifiche inviate non sono firmate, ma se lo fossero questo fix risolverebbe il problema.
  171.                 // Non capisco perche' se cmq attivo questo canale poi l'xpath per mtom non funziona
  172.                 OpenSPCoop2Properties openSPCoopProperties = OpenSPCoop2Properties.getInstance();
  173.                 context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWord_urlBased(), "true");
  174.                 context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWordMimeType_urlBased(),"application/octet-stream");
  175.             }
  176.            
  177.         }catch(Exception e){
  178.             OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("PreInRequestHandler error: "+e.getMessage(),e);
  179.         }
  180.        
  181.        
  182.        
  183.     }

  184. }