AutenticazioneUtils.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.autenticazione;

  21. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  22. import org.openspcoop2.message.OpenSPCoop2Message;
  23. import org.openspcoop2.utils.transport.TransportUtils;
  24. import org.openspcoop2.utils.transport.http.HttpConstants;


  25. /**
  26.  * AutenticazioneUtils
  27.  *
  28.  * @author Andrea Poli (apoli@link.it)
  29.  * @author $Author$
  30.  * @version $Rev$, $Date$
  31.  */
  32. public class AutenticazioneUtils {

  33.     public static void finalizeProcessHeaderAuthorization(OpenSPCoop2Message message, boolean clean) throws AutenticazioneException {
  34.         try {
  35.             if(message.getTransportRequestContext()!=null) {
  36.                 if(message.getTransportRequestContext().getHeaders()!=null) {
  37.                     String headerValue = message.getTransportRequestContext().getHeaderFirstValue(HttpConstants.AUTHORIZATION);
  38.                     if(headerValue!=null) {
  39.                         message.getTransportRequestContext().removeHeader(HttpConstants.AUTHORIZATION);
  40.                         if(!clean) {
  41.                             message.forceTransportHeader(HttpConstants.AUTHORIZATION, headerValue); // serve soprattutto per soap
  42.                         }
  43.                     }
  44.                 }
  45.             }
  46.         }catch(Throwable t) {
  47.             throw new AutenticazioneException("Clean Header Authorization failed: "+t.getMessage(),t);
  48.         }
  49.     }
  50.    
  51.     public static void finalizeProcessPrincipal(OpenSPCoop2Message message, TipoAutenticazionePrincipal tipoAutenticazionePrincipal, String nome, boolean clean) throws AutenticazioneException {
  52.         try {
  53.             switch (tipoAutenticazionePrincipal) {
  54.             case CONTAINER:
  55.             case INDIRIZZO_IP:
  56.             case INDIRIZZO_IP_X_FORWARDED_FOR:
  57.             case URL:
  58.             case TOKEN:
  59.                 break;
  60.             case HEADER:
  61.                 if(nome!=null && message.getTransportRequestContext()!=null) {
  62.                     if(message.getTransportRequestContext().getHeaders()!=null) {
  63.                         String headerValue = message.getTransportRequestContext().getHeaderFirstValue(nome);
  64.                         if(headerValue!=null) {
  65.                             message.getTransportRequestContext().removeHeader(nome);
  66.                             if(!clean) {
  67.                                 message.forceTransportHeader(nome, headerValue); // serve soprattutto per soap
  68.                             }
  69.                         }
  70.                     }
  71.                 }
  72.                 break;
  73.             case FORM:
  74.                 if(message.getTransportRequestContext()!=null) {
  75.                     if(message.getTransportRequestContext().getParameters()!=null) {
  76.                         String propertyValue = message.getTransportRequestContext().getParameterFirstValue(nome);
  77.                         if(propertyValue!=null) {
  78.                             message.getTransportRequestContext().removeParameter(nome);
  79.                             if(!clean) {
  80.                                 message.forceUrlProperty(nome, propertyValue); // serve soprattutto per soap
  81.                             }
  82.                         }
  83.                     }
  84.                 }
  85.                 break;
  86.             }
  87.         }catch(Throwable t) {
  88.             throw new AutenticazioneException("Clean Principal failed: "+t.getMessage(),t);
  89.         }
  90.     }
  91.    
  92.     public static void finalizeProcessApiKey(OpenSPCoop2Message message,
  93.             boolean header, boolean cookie, boolean queryParameter,
  94.             String nomeHeader, String nomeCookie, String nomeQueryParameter,
  95.             boolean clean) throws AutenticazioneException {
  96.        
  97.         if(header) {
  98.             if(nomeHeader!=null && message.getTransportRequestContext()!=null) {
  99.                 if(message.getTransportRequestContext().getHeaders()!=null) {
  100.                     String headerValue = message.getTransportRequestContext().getHeaderFirstValue(nomeHeader);
  101.                     if(headerValue!=null) {
  102.                         message.getTransportRequestContext().removeHeader(nomeHeader);
  103.                         if(!clean) {
  104.                             message.forceTransportHeader(nomeHeader, headerValue); // serve soprattutto per soap
  105.                         }
  106.                     }
  107.                 }
  108.             }
  109.         }
  110.         if(cookie) {
  111.             if(nomeCookie!=null && message.getTransportRequestContext()!=null) {
  112.                 if(message.getTransportRequestContext().getHeaders()!=null) {
  113.                     String headerValue = message.getTransportRequestContext().getHeaderFirstValue(HttpConstants.COOKIE);
  114.                     if(headerValue!=null) {
  115.                         message.getTransportRequestContext().removeHeader(HttpConstants.COOKIE);
  116.                         if(!clean) {
  117.                             TransportUtils.setHeader(message.getTransportRequestContext().getHeaders(), HttpConstants.COOKIE, headerValue); // inserisco anche qua in modo che il valore aggiornato sia disponibile sulle trasformazioni
  118.                             message.forceTransportHeader(HttpConstants.COOKIE, headerValue); // serve soprattutto per soap
  119.                         }
  120.                         else {
  121.                             String [] tmp = headerValue.split(HttpConstants.COOKIE_SEPARATOR);
  122.                             StringBuilder sb = new StringBuilder();
  123.                             if(tmp!=null && tmp.length>0) {
  124.                                 for (int i = 0; i < tmp.length; i++) {
  125.                                     String cNameValue = tmp[i];
  126.                                     String [] c = cNameValue.split(HttpConstants.COOKIE_NAME_VALUE_SEPARATOR);
  127.                                     if(c!=null && c.length>0) {
  128.                                         String name = c[0];
  129.                                         if(!nomeCookie.equalsIgnoreCase(name)) {
  130.                                             if(sb.length()>0) {
  131.                                                 sb.append(HttpConstants.COOKIE_SEPARATOR);
  132.                                             }
  133.                                             sb.append(cNameValue);
  134.                                         }
  135.                                     }
  136.                                 }
  137.                             }
  138.                             if(sb.length()>0) {
  139.                                 TransportUtils.setHeader(message.getTransportRequestContext().getHeaders(),HttpConstants.COOKIE, sb.toString());
  140.                             }
  141.                         }
  142.                     }
  143.                 }
  144.             }
  145.         }
  146.         if(queryParameter) {
  147.             if(message.getTransportRequestContext()!=null) {
  148.                 if(message.getTransportRequestContext().getParameters()!=null) {
  149.                     String propertyValue = message.getTransportRequestContext().getParameterFirstValue(nomeQueryParameter);
  150.                     if(propertyValue!=null) {
  151.                         message.getTransportRequestContext().removeParameter(nomeQueryParameter);
  152.                         if(!clean) {
  153.                             message.forceUrlProperty(nomeQueryParameter, propertyValue); // serve soprattutto per soap
  154.                         }
  155.                     }
  156.                 }
  157.             }
  158.         }
  159.        
  160.     }
  161. }