ModIUtils.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.utils;

  21. import java.lang.reflect.Method;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;

  26. import org.apache.commons.lang.StringUtils;
  27. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  28. import org.openspcoop2.core.constants.CostantiDB;
  29. import org.openspcoop2.core.constants.CostantiLabel;
  30. import org.openspcoop2.core.id.IDAccordo;
  31. import org.openspcoop2.core.id.IDServizioApplicativo;
  32. import org.openspcoop2.core.id.IDSoggetto;
  33. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  34. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  35. import org.openspcoop2.core.registry.Fruitore;
  36. import org.openspcoop2.core.registry.Proprieta;
  37. import org.openspcoop2.core.registry.ProtocolProperty;
  38. import org.openspcoop2.core.registry.Soggetto;
  39. import org.openspcoop2.core.registry.constants.ServiceBinding;
  40. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  41. import org.openspcoop2.core.registry.utils.RegistroServiziUtils;
  42. import org.openspcoop2.message.OpenSPCoop2Message;
  43. import org.openspcoop2.protocol.sdk.Busta;
  44. import org.openspcoop2.protocol.sdk.ProtocolException;
  45. import org.openspcoop2.utils.MapKey;
  46. import org.openspcoop2.utils.certificate.KeystoreParams;
  47. import org.openspcoop2.utils.certificate.KeystoreType;
  48. import org.openspcoop2.utils.certificate.hsm.HSMUtils;
  49. import org.openspcoop2.utils.certificate.remote.RemoteKeyType;
  50. import org.openspcoop2.utils.certificate.remote.RemoteStoreConfig;
  51. import org.openspcoop2.utils.digest.DigestEncoding;
  52. import org.openspcoop2.utils.io.Base64Utilities;
  53. import org.openspcoop2.utils.json.JsonPathExpressionEngine;
  54. import org.slf4j.Logger;

  55. /**
  56.  * ModIUtils
  57.  *
  58.  * @author Poli Andrea (apoli@link.it)
  59.  * @author $Author$
  60.  * @version $Rev$, $Date$
  61.  */
  62. public class ModIUtils {
  63.    
  64.     private ModIUtils() {}

  65.     // COSTANTI boolean
  66.     public static final String INTEGRITY = "integrity";
  67.     public static final String DIGEST_RICHIESTA = "request-digest";
  68.     public static final String CORNICE_SICUREZZA = "user-info";
  69.     public static final String CORNICE_SICUREZZA_PATTERN = "user-info-pattern";
  70.     public static final String CORNICE_SICUREZZA_SCHEMA = "user-info-schema";
  71.     public static final String HEADER_DUPLICATI = "contemporary-headers";
  72.     public static boolean isBooleanIndicator(String key) {
  73.         return ModIUtils.INTEGRITY.equals(key) ||
  74.                 ModIUtils.DIGEST_RICHIESTA.equals(key) ||
  75.                 ModIUtils.CORNICE_SICUREZZA.equals(key) ||
  76.                 ModIUtils.HEADER_DUPLICATI.equals(key);
  77.     }
  78.    
  79.     // COSTANTI string
  80.     private static final String API_PREFIX = "api-";
  81.     public static final String API_SICUREZZA_CANALE_PATTERN = API_PREFIX+"channel-security-pattern";
  82.     public static final String API_SICUREZZA_MESSAGGIO_PREFIX = API_PREFIX+"message-security";
  83.     public static final String API_SICUREZZA_MESSAGGIO_PATTERN = API_SICUREZZA_MESSAGGIO_PREFIX+"-pattern";
  84.     public static final String API_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_ID_AUTH = API_SICUREZZA_MESSAGGIO_PREFIX+"-sorgente-token-id-auth";
  85.     public static final String API_SICUREZZA_MESSAGGIO_HTTP_HEADER = API_SICUREZZA_MESSAGGIO_PREFIX+"-http-header";
  86.     public static final String API_SICUREZZA_MESSAGGIO_APPLICABILITA = API_SICUREZZA_MESSAGGIO_PREFIX+"-applicability";
  87.     public static final String API_SICUREZZA_MESSAGGIO_REQUEST_DIGEST = API_SICUREZZA_MESSAGGIO_PREFIX+"-request-digest";
  88.     public static final String API_SICUREZZA_MESSAGGIO_USER_INFO = API_SICUREZZA_MESSAGGIO_PREFIX+"-user-info";
  89.    
  90.     private static final String REQUEST_PREFIX = "request-";
  91.     private static final String RESPONSE_PREFIX = "response-";
  92.    
  93.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_SIGNATURE_ALGORITHM = "signature-algorithm";
  94.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_CANONICALIZATION_ALGORITHM = "canonicalization-algorithm";
  95.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_DIGEST_ENCODING = "digest-encoding";
  96.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_HTTP_HEADER_FIRMATI = "signed-http-headers";
  97.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_SOAP_HEADER_FIRMATI = "signed-soap-headers";
  98.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_RIFERIMENTO_X509 = "x509-reference";
  99.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_CATENA_CERTIFICATI_X509 = "x509-certificate-chain";
  100.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_INCLUDE_SIGNATURE_TOKEN = "include-signature-token";
  101.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_TTL = "ttl";
  102.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_AUDIENCE = "audience";
  103.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_VERIFICA_AUDIENCE = "audience-verify";
  104.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_INTEGRITY_AUDIENCE = "integrity-audience";
  105.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE = "fruizione-keystore-mode";
  106.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_X5U_CERTIFICATE_URL = "x5u-certificate-url";
  107.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX = "audit-info-";
  108.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_AUDIT_AUDIENCE = "audit-audience";
  109.    
  110.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_STORE_TYPE = "type";
  111.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_STORE_PATH = "path";
  112.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_STORE_CRLS = "crls";
  113.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_STORE_OCSP_POLICY = "ocsp";
  114.     public static final String API_IMPL_SICUREZZA_MESSAGGIO_KEY_ALIAS = "key-alias";
  115.    
  116.     public static final String API_IMPL_SICUREZZA_OAUTH_IDENTIFICATIVO = "oauth-id";
  117.     public static final String API_IMPL_SICUREZZA_OAUTH_KID = "oauth-kid";
  118.    
  119.        
  120.    
  121.     // COSTANTI SERVIZIO
  122.     public static final String HSM = "hsm";
  123.    
  124.     public static Map<String, String> configToMap(AccordoServizioParteComune aspc, AccordoServizioParteSpecifica asps,
  125.             String urlInvocazione,
  126.             Fruitore fruitore, String urlConnettoreFruitoreModI
  127.             ) throws ProtocolException{
  128.        
  129.         boolean gestioneErogatori = (fruitore==null);
  130.         boolean gestioneFruitori = !gestioneErogatori;
  131.        
  132.         Map<String, String> map = new HashMap<>();
  133.                
  134.         List<ProtocolProperty> protocolPropertyList = gestioneErogatori ? asps.getProtocolPropertyList() : fruitore.getProtocolPropertyList();
  135.        
  136.         boolean rest = ServiceBinding.REST.equals(aspc.getServiceBinding());
  137.         boolean digest = isProfiloSicurezzaMessaggioConIntegritaX509(aspc, asps.getPortType()) || isProfiloSicurezzaMessaggioConIntegritaKid(aspc, asps.getPortType());
  138.         boolean digestRichiesta = isProfiloSicurezzaMessaggioRequestDigest(aspc, asps.getPortType());
  139.         boolean corniceSicurezza = isProfiloSicurezzaMessaggioCorniceSicurezza(aspc, asps.getPortType());
  140.         String patternDatiCorniceSicurezza = null;
  141.         String schemaDatiCorniceSicurezza = null;
  142.         if(corniceSicurezza) {
  143.             patternDatiCorniceSicurezza = getProfiloSicurezzaMessaggioCorniceSicurezzaPattern(aspc, asps.getPortType());
  144.             if(patternDatiCorniceSicurezza==null) {
  145.                 // backward compatibility
  146.                 patternDatiCorniceSicurezza = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD;
  147.             }
  148.             if(!CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD.equals(patternDatiCorniceSicurezza)) {
  149.                 schemaDatiCorniceSicurezza = getProfiloSicurezzaMessaggioCorniceSicurezzaSchema(aspc, asps.getPortType());
  150.             }
  151.         }
  152.         boolean headerDuplicati = false;
  153.         if(rest) {
  154.             headerDuplicati = isProfiloSicurezzaMessaggioConHeaderDuplicati(aspc, asps.getPortType());
  155.         }
  156.         map.put(INTEGRITY, digest+"");
  157.         map.put(DIGEST_RICHIESTA, digestRichiesta+"");
  158.         map.put(CORNICE_SICUREZZA, corniceSicurezza+"");
  159.         if(corniceSicurezza) {
  160.             map.put(CORNICE_SICUREZZA_PATTERN, patternDatiCorniceSicurezza);
  161.             if(schemaDatiCorniceSicurezza!=null) {
  162.                 map.put(CORNICE_SICUREZZA_SCHEMA, schemaDatiCorniceSicurezza);
  163.             }
  164.         }
  165.         map.put(HEADER_DUPLICATI, headerDuplicati+"");
  166.        
  167.         // sicurezza canale
  168.         String v = getStringValue(aspc.getProtocolPropertyList(), CostantiDB.MODIPA_PROFILO_SICUREZZA_CANALE);
  169.         String canale = null;
  170.         if(CostantiDB.MODIPA_PROFILO_SICUREZZA_CANALE_VALUE_IDAC01.equals(v)) {
  171.             canale = CostantiLabel.MODIPA_PROFILO_SICUREZZA_CANALE_LABEL_IDAC01;
  172.         }
  173.         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_CANALE_VALUE_IDAC02.equals(v)) {
  174.             canale = CostantiLabel.MODIPA_PROFILO_SICUREZZA_CANALE_LABEL_IDAC02;
  175.         }
  176.         if(canale!=null) {
  177.             map.put(API_SICUREZZA_CANALE_PATTERN, canale);
  178.         }
  179.        
  180.         // sicurezza messaggio
  181.         boolean sicurezzaMessaggio = false;
  182.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO, aspc, asps.getPortType(), false);
  183.         if(tmp!=null && !tmp.isEmpty()) {
  184.             StringBuilder sbMes = new StringBuilder();
  185.             for (String pattern : tmp) {
  186.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM01.equals(pattern)) {
  187.                     if(sbMes.length()>0) {
  188.                         sbMes.append(", ");
  189.                     }
  190.                     sbMes.append(rest ? CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM01_REST : CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM01_SOAP );
  191.                 }
  192.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM02.equals(pattern)) {
  193.                     if(sbMes.length()>0) {
  194.                         sbMes.append(", ");
  195.                     }
  196.                     sbMes.append(rest ? CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM02_REST : CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM02_SOAP );
  197.                 }
  198.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0301.equals(pattern)) {
  199.                     if(sbMes.length()>0) {
  200.                         sbMes.append(", ");
  201.                     }
  202.                     sbMes.append(rest ? CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0301_REST : CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0301_SOAP );
  203.                 }
  204.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0302.equals(pattern)) {
  205.                     if(sbMes.length()>0) {
  206.                         sbMes.append(", ");
  207.                     }
  208.                     sbMes.append(rest ? CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0302_REST : CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0302_SOAP );
  209.                 }
  210.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0401.equals(pattern) && rest) {
  211.                     if(sbMes.length()>0) {
  212.                         sbMes.append(", ");
  213.                     }
  214.                     sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0401_REST);
  215.                 }
  216.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0402.equals(pattern) && rest) {
  217.                     if(sbMes.length()>0) {
  218.                         sbMes.append(", ");
  219.                     }
  220.                     sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_LABEL_IDAM0402_REST);
  221.                 }
  222.             }
  223.             if(sbMes.length()>0) {
  224.                 sicurezzaMessaggio = true;
  225.                 map.put(API_SICUREZZA_MESSAGGIO_PATTERN, sbMes.toString());
  226.             }
  227.         }
  228.        
  229.         if(sicurezzaMessaggio) {
  230.            
  231.             // Sorgente Token ID AUTH
  232.             tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH, aspc, asps.getPortType(), false);
  233.             if(tmp!=null && !tmp.isEmpty()) {
  234.                 StringBuilder sbMes = new StringBuilder();
  235.                 for (String mode : tmp) {
  236.                     if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_LOCALE.equals(mode)) {
  237.                         if(sbMes.length()>0) {
  238.                             sbMes.append(", ");
  239.                         }
  240.                         sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_LOCALE);
  241.                     }
  242.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_PDND.equals(mode)) {
  243.                         if(sbMes.length()>0) {
  244.                             sbMes.append(", ");
  245.                         }
  246.                         sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_PDND);
  247.                     }
  248.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_OAUTH.equals(mode)) {
  249.                         if(sbMes.length()>0) {
  250.                             sbMes.append(", ");
  251.                         }
  252.                         sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_OAUTH);
  253.                     }
  254.                 }
  255.                 if(sbMes.length()>0) {
  256.                     map.put(API_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_ID_AUTH, sbMes.toString());
  257.                 }
  258.             }
  259.            
  260.             if(rest) {
  261.                 // Header (duplicati)
  262.                 tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER, aspc, asps.getPortType(), false);
  263.                 if(tmp!=null && !tmp.isEmpty()) {
  264.                     StringBuilder sbMes = new StringBuilder();
  265.                     String headerModI = getHeaderModI();
  266.                     for (String mode : tmp) {
  267.                         if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_MODIPA.equals(mode)) {
  268.                             if(sbMes.length()>0) {
  269.                                 sbMes.append(", ");
  270.                             }
  271.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_MODIPA.
  272.                                     replace(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_MODIPA, headerModI));
  273.                         }
  274.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION.equals(mode)) {
  275.                             if(sbMes.length()>0) {
  276.                                 sbMes.append(", ");
  277.                             }
  278.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_AUTHORIZATION);
  279.                         }
  280.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA.equals(mode)) {
  281.                             if(sbMes.length()>0) {
  282.                                 sbMes.append(", ");
  283.                             }
  284.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_AUTHORIZATION_MODIPA.
  285.                                     replace(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_MODIPA, headerModI));
  286.                         }
  287.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA_AUTH_IN_RESPONSE.equals(mode)) {
  288.                             if(sbMes.length()>0) {
  289.                                 sbMes.append(", ");
  290.                             }
  291.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_AUTHORIZATION_MODIPA_AUTH_IN_RESPONSE.
  292.                                     replace(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_MODIPA, headerModI));
  293.                         }
  294.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_CUSTOM.equals(mode)) {
  295.                             if(sbMes.length()>0) {
  296.                                 sbMes.append(", ");
  297.                             }
  298.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_CUSTOM);
  299.                         }
  300.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM.equals(mode)) {
  301.                             if(sbMes.length()>0) {
  302.                                 sbMes.append(", ");
  303.                             }
  304.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_AUTHORIZATION_CUSTOM);
  305.                         }
  306.                         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM_AUTH_IN_RESPONSE.equals(mode)) {
  307.                             if(sbMes.length()>0) {
  308.                                 sbMes.append(", ");
  309.                             }
  310.                             sbMes.append(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_LABEL_AUTHORIZATION_CUSTOM_AUTH_IN_RESPONSE);
  311.                         }
  312.                     }
  313.                     if(sbMes.length()>0) {
  314.                         map.put(API_SICUREZZA_MESSAGGIO_HTTP_HEADER, sbMes.toString());
  315.                     }
  316.                 }
  317.             }
  318.            
  319.             // Applicabilita
  320.             tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE, aspc, asps.getPortType(), false);
  321.             if(tmp!=null && !tmp.isEmpty()) {
  322.                 StringBuilder sbMes = new StringBuilder();
  323.                 for (String mode : tmp) {
  324.                     if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_ENTRAMBI.equals(mode)) {
  325.                         if(sbMes.length()>0) {
  326.                             sbMes.append(", ");
  327.                         }
  328.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_ENTRAMBI);
  329.                     }
  330.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_RICHIESTA.equals(mode)) {
  331.                         if(sbMes.length()>0) {
  332.                             sbMes.append(", ");
  333.                         }
  334.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_RICHIESTA);
  335.                     }
  336.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_RISPOSTA.equals(mode)) {
  337.                         if(sbMes.length()>0) {
  338.                             sbMes.append(", ");
  339.                         }
  340.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_RISPOSTA);
  341.                     }
  342.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_ENTRAMBI_CON_ATTACHMENTS.equals(mode)) {
  343.                         if(sbMes.length()>0) {
  344.                             sbMes.append(", ");
  345.                         }
  346.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_ENTRAMBI_CON_ATTACHMENTS);
  347.                     }
  348.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_RICHIESTA_CON_ATTACHMENTS.equals(mode)) {
  349.                         if(sbMes.length()>0) {
  350.                             sbMes.append(", ");
  351.                         }
  352.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_RICHIESTA_CON_ATTACHMENTS);
  353.                     }
  354.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_RISPOSTA_CON_ATTACHMENTS.equals(mode)) {
  355.                         if(sbMes.length()>0) {
  356.                             sbMes.append(", ");
  357.                         }
  358.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_RISPOSTA_CON_ATTACHMENTS);
  359.                     }
  360.                     else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_MODE_VALUE_PERSONALIZZATO.equals(mode)) {
  361.                         if(sbMes.length()>0) {
  362.                             sbMes.append(", ");
  363.                         }
  364.                         sbMes.append(CostantiLabel.MODIPA_API_CONFIGURAZIONE_SICUREZZA_MESSAGGIO_MODE_LABEL_PERSONALIZZATO);
  365.                     }
  366.                 }
  367.                 if(sbMes.length()>0) {
  368.                     map.put(API_SICUREZZA_MESSAGGIO_APPLICABILITA, sbMes.toString());
  369.                 }
  370.             }
  371.            
  372.             // Request Digest
  373.             map.put(API_SICUREZZA_MESSAGGIO_REQUEST_DIGEST,
  374.                     digestRichiesta ? StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue());
  375.            
  376.             // Cornice Sicurezza
  377.             if(corniceSicurezza) {
  378.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD.equals(patternDatiCorniceSicurezza)) {
  379.                     map.put(API_SICUREZZA_MESSAGGIO_USER_INFO,
  380.                             CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD);
  381.                 }
  382.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01.equals(patternDatiCorniceSicurezza)) {
  383.                     map.put(API_SICUREZZA_MESSAGGIO_USER_INFO,
  384.                             CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01+" (schema:"+schemaDatiCorniceSicurezza+")");
  385.                 }
  386.                 else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02.equals(patternDatiCorniceSicurezza)) {
  387.                     map.put(API_SICUREZZA_MESSAGGIO_USER_INFO,
  388.                             CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02+" (schema:"+schemaDatiCorniceSicurezza+")");
  389.                 }
  390.             }
  391.             else {
  392.                 map.put(API_SICUREZZA_MESSAGGIO_USER_INFO,
  393.                     StatoFunzionalita.DISABILITATO.getValue());
  394.             }
  395.                            
  396.             boolean request = true;
  397.             addProfiloModISicurezza(map,
  398.                     protocolPropertyList,
  399.                     rest, gestioneFruitori, request,
  400.                     digest,
  401.                     patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
  402.                     headerDuplicati,
  403.                     urlInvocazione, urlConnettoreFruitoreModI);
  404.             addProfiloModISicurezza(map,
  405.                     protocolPropertyList,
  406.                     rest, gestioneFruitori, !request,
  407.                     digest,
  408.                     patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
  409.                     headerDuplicati,
  410.                     urlInvocazione, urlConnettoreFruitoreModI);
  411.         }
  412.         else {
  413.            
  414.             // Sicurezza OAuth
  415.            
  416.             if( gestioneFruitori ) {
  417.                
  418.                 v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO);
  419.                 if(v!=null && StringUtils.isNotEmpty(v)) {
  420.                     map.put(API_IMPL_SICUREZZA_OAUTH_IDENTIFICATIVO, v);
  421.                 }
  422.                 v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_OAUTH_KID);
  423.                 if(v!=null && StringUtils.isNotEmpty(v)) {
  424.                     map.put(API_IMPL_SICUREZZA_OAUTH_KID, v);
  425.                 }
  426.                
  427.                 addStore(map, protocolPropertyList, "", false, false);
  428.             }
  429.            
  430.         }
  431.        
  432.         return map;
  433.        
  434.     }
  435.    
  436.     public static String getPrefixKey(boolean fruizione, boolean request) {
  437.         String prefixKey = null;
  438.         if(fruizione) {
  439.             // nop
  440.         }
  441.         /**if(request) {
  442.             prefixKey = fruizione ? "out-request-" : "in-request-";
  443.         }
  444.         else {
  445.             prefixKey = fruizione ? "in-response-" : "out-response-";
  446.         }*/
  447.         prefixKey = request ? REQUEST_PREFIX : RESPONSE_PREFIX;
  448.         return prefixKey;
  449.     }
  450.    
  451.     private static void addProfiloModISicurezza(Map<String, String> map,
  452.             List<ProtocolProperty> protocolPropertyList,
  453.             boolean rest, boolean fruizione, boolean request,
  454.             boolean digest,
  455.             String patternDatiCorniceSicurezza, String schemaDatiCorniceSicurezza,
  456.             boolean headerDuplicati,
  457.             String urlInvocazione, String urlConnettoreFruitoreModI) {
  458.        
  459.         String prefixKey = getPrefixKey(fruizione, request);
  460.        
  461.         // Firma
  462.         boolean x5u = false;
  463.         if(rest) {
  464.            
  465.             // Algoritmo
  466.             String idProfiloSicurezzaMessaggioAlgItem = null;
  467.             if(fruizione && request) {
  468.                 idProfiloSicurezzaMessaggioAlgItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_ALG;
  469.             }
  470.             else if(!fruizione && !request) {
  471.                 idProfiloSicurezzaMessaggioAlgItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_ALG;
  472.             }
  473.             if(idProfiloSicurezzaMessaggioAlgItem!=null) {
  474.                 String v = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioAlgItem);
  475.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_SIGNATURE_ALGORITHM, v);
  476.             }
  477.            
  478.             // Codifica Digest
  479.             String idProfiloSicurezzaMessaggioDigestEncodingItem = null;
  480.             if(fruizione && request) {
  481.                 idProfiloSicurezzaMessaggioDigestEncodingItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_DIGEST_ENCODING;
  482.             }
  483.             else if(!fruizione && !request) {
  484.                 idProfiloSicurezzaMessaggioDigestEncodingItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_DIGEST_ENCODING;
  485.             }
  486.             if(idProfiloSicurezzaMessaggioDigestEncodingItem!=null) {
  487.                 String v = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioDigestEncodingItem);
  488.                 if(v!=null) {
  489.                     try {
  490.                         DigestEncoding de = DigestEncoding.valueOf(v);
  491.                         if(DigestEncoding.BASE64.equals(de)) {
  492.                             map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_DIGEST_ENCODING, CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_DIGEST_ENCODING_LABEL_BASE64);
  493.                         }else{ //HEX:
  494.                             map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_DIGEST_ENCODING, CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_DIGEST_ENCODING_LABEL_HEX);
  495.                         }
  496.                     }catch(Exception t) {
  497.                         map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_DIGEST_ENCODING, v);
  498.                     }
  499.                 }
  500.                 else {
  501.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_DIGEST_ENCODING, v);
  502.                 }
  503.             }
  504.            
  505.             if(digest &&
  506.                 // header firmati
  507.                 ( (request && fruizione) || (!request && !fruizione) )
  508.                 ){
  509.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_HTTP_HEADER_FIRMATI,
  510.                         getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST));
  511.             }
  512.            
  513.             // Posizione Certificato
  514.             String rifX509Id = request ? CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509 :
  515.                 CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509;
  516.             String v = getStringValue(protocolPropertyList, rifX509Id);
  517.             map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_RIFERIMENTO_X509, v);
  518.             x5u = (v!=null) && v.contains("x5u");
  519.            
  520.             // Certificate Chain
  521.             String rifX509Xc5ChainId = null;
  522.             if(fruizione && request) {
  523.                 rifX509Xc5ChainId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN;
  524.             }
  525.             else if(!fruizione && !request) {
  526.                 rifX509Xc5ChainId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_RIFERIMENTO_X509_X5C_USE_CERTIFICATE_CHAIN;
  527.             }
  528.             if(rifX509Xc5ChainId!=null) {
  529.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_CATENA_CERTIFICATI_X509,
  530.                         getBooleanValueAsStato(protocolPropertyList, rifX509Xc5ChainId));
  531.             }
  532.         }
  533.         else {
  534.            
  535.             // Algoritmo
  536.             String idProfiloSicurezzaMessaggioAlgItem = null;
  537.             if(fruizione && request) {
  538.                 idProfiloSicurezzaMessaggioAlgItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_ALG;
  539.             }
  540.             else if(!fruizione && !request) {
  541.                 idProfiloSicurezzaMessaggioAlgItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_ALG;
  542.             }
  543.             if(idProfiloSicurezzaMessaggioAlgItem!=null) {
  544.                 String algoLabel = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioAlgItem);
  545.                 if(algoLabel.contains("#") && !algoLabel.endsWith("#")) {
  546.                     algoLabel = algoLabel.substring(algoLabel.indexOf("#")+1, algoLabel.length()).toUpperCase();
  547.                 }
  548.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_SIGNATURE_ALGORITHM, algoLabel);
  549.             }
  550.            
  551.             // Algoritmo C14N
  552.             String idProfiloSicurezzaMessaggioAlgC14NItem = null;
  553.             if(fruizione && request) {
  554.                 idProfiloSicurezzaMessaggioAlgC14NItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_CANONICALIZATION_ALG;
  555.             }
  556.             else if(!fruizione && !request) {
  557.                 idProfiloSicurezzaMessaggioAlgC14NItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_CANONICALIZATION_ALG;
  558.             }
  559.             if(idProfiloSicurezzaMessaggioAlgC14NItem!=null) {
  560.                 String algoLabel = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioAlgC14NItem);
  561.                 if(CostantiDB.INCLUSIVE_C14N_10_OMITS_COMMENTS_URI.equals(algoLabel)) {
  562.                     algoLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_LABEL_INCLUSIVE_C14N_10;
  563.                 }
  564.                 else if(CostantiDB.INCLUSIVE_C14N_11_OMITS_COMMENTS_URI.equals(algoLabel)) {
  565.                     algoLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_LABEL_INCLUSIVE_C14N_11;
  566.                 }
  567.                 else if(CostantiDB.EXCLUSIVE_C14N_10_OMITS_COMMENTS_URI.equals(algoLabel)) {
  568.                     algoLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_CANONICALIZATION_ALG_LABEL_EXCLUSIVE_C14N_10;
  569.                 }
  570.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_CANONICALIZATION_ALGORITHM,algoLabel);
  571.             }
  572.            
  573.             if(digest &&
  574.                 // header firmati
  575.                 ( (request && fruizione) || (!request && !fruizione) )
  576.             ){
  577.                 String v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP);
  578.                 if(v!=null) {
  579.                     int index = 0;
  580.                     while(v.contains("\n") && index<1000) {
  581.                         v = v.replace("\n", ", ");
  582.                         index++;
  583.                     }
  584.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_SOAP_HEADER_FIRMATI, v);
  585.                 }
  586.             }
  587.            
  588.             // Posizione Certificato
  589.             String rifX509Id = null;
  590.             if(fruizione && request) {
  591.                 rifX509Id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509;
  592.             }
  593.             else if(!fruizione && !request) {
  594.                 rifX509Id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509;
  595.             }
  596.             boolean useCertificateChain = false;
  597.             boolean includeSignatureToken = false;
  598.             if(rifX509Id!=null) {
  599.                 String refLabel = getStringValue(protocolPropertyList, rifX509Id);
  600.                 if(CostantiDB.KEY_IDENTIFIER_BST_DIRECT_REFERENCE.equals(refLabel)){
  601.                     refLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_LABEL_BINARY_SECURITY_TOKEN;
  602.                     useCertificateChain = true;
  603.                 }
  604.                 else if(CostantiDB.KEY_IDENTIFIER_ISSUER_SERIAL.equals(refLabel)){
  605.                     refLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_LABEL_SECURITY_TOKEN_REFERENCE;
  606.                     includeSignatureToken = true;
  607.                 }
  608.                 else if(CostantiDB.KEY_IDENTIFIER_X509.equals(refLabel)){
  609.                     refLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_LABEL_KEY_IDENTIFIER_X509;
  610.                 }
  611.                 else if(CostantiDB.KEY_IDENTIFIER_THUMBPRINT.equals(refLabel)){
  612.                     refLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_LABEL_KEY_IDENTIFIER_THUMBPRINT;
  613.                     includeSignatureToken = true;
  614.                 }
  615.                 else if(CostantiDB.KEY_IDENTIFIER_SKI.equals(refLabel)){
  616.                     refLabel = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RIFERIMENTO_X509_LABEL_KEY_IDENTIFIER_SKI;
  617.                     includeSignatureToken = true;
  618.                 }
  619.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_RIFERIMENTO_X509, refLabel);
  620.             }
  621.            
  622.             if(useCertificateChain) {
  623.                 // Certificate Chain
  624.                 String certId = null;
  625.                 if(fruizione && request) {
  626.                     certId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN;
  627.                 }
  628.                 else if(!fruizione && !request) {
  629.                     certId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_USE_CERTIFICATE_CHAIN;
  630.                 }
  631.                 if(certId!=null) {
  632.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_CATENA_CERTIFICATI_X509,
  633.                             getBooleanValueAsStato(protocolPropertyList, certId));
  634.                 }
  635.             }
  636.            
  637.             if(includeSignatureToken) {
  638.                 // Signature Token
  639.                 String certId = null;
  640.                 if(fruizione && request) {
  641.                     certId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RICHIESTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN;
  642.                 }
  643.                 else if(!fruizione && !request) {
  644.                     certId = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SOAP_RISPOSTA_RIFERIMENTO_X509_BINARY_SECURITY_TOKEN_INCLUDE_SIGNATURE_TOKEN;
  645.                 }
  646.                 if(certId!=null) {
  647.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_INCLUDE_SIGNATURE_TOKEN,
  648.                             getBooleanValueAsStato(protocolPropertyList, certId));
  649.                 }
  650.             }
  651.            
  652.         }
  653.        
  654.         // Ttl
  655.         String idProfiloSicurezzaMessaggioIatTtlItem = null;
  656.         String idProfiloSicurezzaMessaggioIatTtlSecondsItem = null;
  657.         if(fruizione && !request) {
  658.             idProfiloSicurezzaMessaggioIatTtlItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT;
  659.             idProfiloSicurezzaMessaggioIatTtlSecondsItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_IAT_SECONDS;
  660.         }
  661.         else if(!fruizione && request) {
  662.             idProfiloSicurezzaMessaggioIatTtlItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT;
  663.             idProfiloSicurezzaMessaggioIatTtlSecondsItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_IAT_SECONDS;
  664.         }
  665.         if(idProfiloSicurezzaMessaggioIatTtlItem!=null && idProfiloSicurezzaMessaggioIatTtlSecondsItem!=null) {
  666.             String v = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioIatTtlItem);
  667.             if(v==null || StringUtils.isEmpty(v) || CostantiDB.MODIPA_PROFILO_DEFAULT.equals(v)) {
  668.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_TTL, CostantiLabel.MODIPA_LABEL_DEFAULT);
  669.             }
  670.             else {
  671.                 v = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioIatTtlSecondsItem);
  672.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_TTL, v);
  673.             }
  674.         }
  675.        
  676.         // Expiration Time
  677.         String idProfiloSicurezzaMessaggioExpItem = null;
  678.         if(fruizione && request) {
  679.             idProfiloSicurezzaMessaggioExpItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_EXPIRED;
  680.         }
  681.         else if(!fruizione && !request) {
  682.             idProfiloSicurezzaMessaggioExpItem = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_EXPIRED;
  683.         }
  684.         if(idProfiloSicurezzaMessaggioExpItem!=null) {
  685.             String v = getStringValue(protocolPropertyList, idProfiloSicurezzaMessaggioExpItem);
  686.             if(v!=null && StringUtils.isNotEmpty(v)) {
  687.                 map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_TTL, v);
  688.             }
  689.         }
  690.        
  691.         // Audit
  692.         boolean audit = false;
  693.         if(request) {
  694.             String v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE);
  695.             String aud = null;
  696.             if(v!=null) {
  697.                 aud = v;
  698.             }else {
  699.                 aud = fruizione ? urlConnettoreFruitoreModI : urlInvocazione;
  700.             }
  701.             map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_AUDIENCE,
  702.                     aud);
  703.             audit = true;
  704.         }
  705.         else {
  706.             if(fruizione) {
  707.                 String stato = getBooleanValueAsStato(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE);
  708.                 if(stato!=null && StringUtils.isNotEmpty(stato)) {
  709.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_VERIFICA_AUDIENCE, stato);
  710.                     if(StatoFunzionalita.ABILITATO.getValue().equals(stato)) {
  711.                        
  712.                         audit = true;
  713.                        
  714.                         String v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_AUDIENCE_VALORE);
  715.                         if(v!=null && StringUtils.isNotEmpty(v)) {
  716.                             map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_AUDIENCE, v);
  717.                         }
  718.                     }
  719.                 }
  720.             }
  721.         }
  722.        
  723.         // X5U URL
  724.         if(x5u) {
  725.             String id = null;
  726.             if(request && fruizione) {
  727.                 id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_X509_VALUE_X5URL;
  728.             }
  729.             if(!request && !fruizione) {
  730.                 id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_X509_VALUE_X5URL;
  731.             }
  732.             if(id!=null) {
  733.                 String v = getStringValue(protocolPropertyList, id);
  734.                 if(v!=null && StringUtils.isNotEmpty(v)) {
  735.                     map.put(prefixKey+API_IMPL_SICUREZZA_MESSAGGIO_X5U_CERTIFICATE_URL, v);
  736.                 }
  737.             }
  738.         }
  739.        
  740.         // CorniceSicurezza
  741.         if(patternDatiCorniceSicurezza!=null) {
  742.             if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD.equals(patternDatiCorniceSicurezza)) {
  743.                
  744.                 String claimCodiceEnte = CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE;
  745.                 String idCodiceEnteMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_MODE;
  746.                 String vCodiceEnteMode = getStringValue(protocolPropertyList, idCodiceEnteMode);
  747.                 if(vCodiceEnteMode!=null && CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(vCodiceEnteMode)) {
  748.                     String idValue = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE;
  749.                     String value = getStringValue(protocolPropertyList, idValue);
  750.                     if(value!=null) {
  751.                         map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimCodiceEnte, value);
  752.                     }
  753.                 }
  754.                 else {
  755.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimCodiceEnte, CostantiDB.MODIPA_PROFILO_DEFAULT);
  756.                 }
  757.                
  758.                 String claimUser = CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER;
  759.                 String idUserMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_MODE;
  760.                 String vUserMode = getStringValue(protocolPropertyList, idUserMode);
  761.                 if(vUserMode!=null && CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(vUserMode)) {
  762.                     String idValue = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER;
  763.                     String value = getStringValue(protocolPropertyList, idValue);
  764.                     if(value!=null) {
  765.                         map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimUser, value);
  766.                     }
  767.                 }
  768.                 else {
  769.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimUser, CostantiDB.MODIPA_PROFILO_DEFAULT);
  770.                 }
  771.                
  772.                 String claimUserIP = CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER;
  773.                 String idUserIPMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_MODE;
  774.                 String vUserIPMode = getStringValue(protocolPropertyList, idUserIPMode);
  775.                 if(vUserIPMode!=null && CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(vUserIPMode)) {
  776.                     String idValue = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER;
  777.                     String value = getStringValue(protocolPropertyList, idValue);
  778.                     if(value!=null) {
  779.                         map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimUserIP, value);
  780.                     }
  781.                 }
  782.                 else {
  783.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+claimUserIP, CostantiDB.MODIPA_PROFILO_DEFAULT);
  784.                 }
  785.                
  786.             }
  787.             else if(schemaDatiCorniceSicurezza!=null){
  788.                
  789.                 String idAuditDifferent = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE ;
  790.                 String v = getStringValue(protocolPropertyList, idAuditDifferent);
  791.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIT_AUDIENCE_VALUE_DIFFERENT.equals(v)) {
  792.                     String idAudit = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_AUDIENCE_CUSTOM_AUDIT;                
  793.                     v = getStringValue(protocolPropertyList, idAudit);
  794.                     if(v!=null && StringUtils.isNotEmpty(v)) {
  795.                         map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_AUDIT_AUDIENCE, v);
  796.                     }
  797.                 }  
  798.                
  799.                 List<String> l = new ArrayList<>();
  800.                 for (ProtocolProperty pp : protocolPropertyList) {
  801.                     if(pp.getName().startsWith(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX)) {
  802.                         String claim = pp.getName().substring(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX.length());
  803.                         l.add(claim);
  804.                     }
  805.                 }
  806.                 if(l!=null && !l.isEmpty()) {
  807.                     for (String c : l) {
  808.                         String idMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_MODE_PREFIX+c;
  809.                         String vMode = getStringValue(protocolPropertyList, idMode);
  810.                         if(vMode!=null && CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(vMode)) {
  811.                             String idValue = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA_PREFIX+c;
  812.                             String value = getStringValue(protocolPropertyList, idValue);
  813.                             if(value!=null) {
  814.                                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+c, value);
  815.                             }
  816.                         }
  817.                         else {
  818.                             map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PREFIX+c, CostantiDB.MODIPA_PROFILO_DEFAULT);
  819.                         }
  820.                     }
  821.                 }
  822.             }
  823.         }
  824.        
  825.         // Header Duplicati
  826.         if(rest && headerDuplicati &&
  827.                 (
  828.                         (!request && fruizione)
  829.                         ||
  830.                         (request && !fruizione)
  831.                 )
  832.                 &&
  833.                 audit) {
  834.             String idAuditDifferent = request ? CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE  :
  835.                 CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE;
  836.             String v = getStringValue(protocolPropertyList, idAuditDifferent);
  837.             if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_REST_DOPPI_HEADER_AUDIENCE_VALUE_DIFFERENT.equals(v)) {
  838.                 String idAudit = request ? CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RICHIESTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY :
  839.                     CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REST_DOPPI_HEADER_AUDIENCE_INTEGRITY;                    
  840.                 v = getStringValue(protocolPropertyList, idAudit);
  841.                 if(v!=null && StringUtils.isNotEmpty(v)) {
  842.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_INTEGRITY_AUDIENCE, v);
  843.                 }
  844.             }  
  845.         }
  846.        
  847.        
  848.         // Sicurezza OAuth
  849.        
  850.         if( fruizione && request ) {
  851.             String v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO);
  852.             if(v!=null && StringUtils.isNotEmpty(v)) {
  853.                 map.put(prefixKey+ API_IMPL_SICUREZZA_OAUTH_IDENTIFICATIVO, v);
  854.             }
  855.             v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_OAUTH_KID);
  856.             if(v!=null && StringUtils.isNotEmpty(v)) {
  857.                 map.put(prefixKey+ API_IMPL_SICUREZZA_OAUTH_KID, v);
  858.             }
  859.         }
  860.        
  861.         // TrustStore
  862.         if( (fruizione && !request) || (!fruizione && request) ) {
  863.            
  864.             // truststore per i certificati
  865.             addStore(map, protocolPropertyList, prefixKey, false, true);
  866.            
  867.             if(rest && x5u) {
  868.                 // ssl per le url (x5u)
  869.                 addStore(map, protocolPropertyList, prefixKey, true, false);
  870.             }
  871.            
  872.         }
  873.        
  874.         // KeyStore
  875.         if(!fruizione && !request) {
  876.             addStore(map, protocolPropertyList, prefixKey, false, false);
  877.         }
  878.        
  879.         if(fruizione && request) {
  880.            
  881.             boolean keystoreDefinitoInFruizione = false;
  882.             String idFruizioneKeystoreFruizioneMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE;
  883.             String v = getStringValue(protocolPropertyList, idFruizioneKeystoreFruizioneMode);
  884.             if(CostantiDB.MODIPA_KEYSTORE_FRUIZIONE.equals(v)) {
  885.                 keystoreDefinitoInFruizione = true;
  886.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE,
  887.                         CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE_LABEL_FRUIZIONE);
  888.             }
  889.             else if(CostantiDB.MODIPA_KEYSTORE_FRUIZIONE_TOKEN_POLICY.equals(v)) {
  890.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE,
  891.                         CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE_LABEL_TOKEN_POLICY);
  892.             }
  893.             else {
  894.                 // verifico di non essere nel caso di API con pattern ID_AUTH_REST_01 via PDND dove la modalità di scelta non viene indicata.
  895.                 if(v==null || StringUtils.isEmpty(v)) {
  896.                     String idFruizioneKeystoreMode = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE;
  897.                     String vMode = getStringValue(protocolPropertyList, idFruizioneKeystoreMode);
  898.                     if(CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(vMode)) {
  899.                         keystoreDefinitoInFruizione = true;
  900.                     }
  901.                 }
  902.                 if(keystoreDefinitoInFruizione) {
  903.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE,
  904.                             CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE_LABEL_FRUIZIONE);
  905.                 }
  906.                 else {
  907.                     map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE,
  908.                             CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE_LABEL_APPLICATIVO);
  909.                 }
  910.             }
  911.            
  912.             if(keystoreDefinitoInFruizione) {
  913.                 addStore(map, protocolPropertyList, prefixKey, false, false);
  914.             }
  915.            
  916.         }
  917.     }
  918.    
  919.     public static String getPrefixKeyStore(boolean prefix, String prefixKey, boolean ssl, boolean truststore) {
  920.         String s = null;
  921.         if(ssl) {
  922.             s = prefixKey+"truststore-ssl";
  923.         }
  924.         else if(truststore) {
  925.             s = prefixKey+"truststore";
  926.         }
  927.         else {
  928.             s = prefixKey+"keystore";
  929.         }
  930.         return prefix ? s+"-" : s;
  931.     }
  932.    
  933.     private static void addStore(Map<String, String> map, List<ProtocolProperty> protocolPropertyList,
  934.             String prefixKeyParam, boolean ssl, boolean truststore) {
  935.        
  936.         String id = null;
  937.         if(ssl) {
  938.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE;
  939.         }
  940.         else if(truststore) {
  941.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE;
  942.         }
  943.         else {
  944.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE;
  945.         }
  946.        
  947.         String v = getStringValue(protocolPropertyList, id);
  948.         if(v==null  || StringUtils.isEmpty(v) || CostantiDB.MODIPA_PROFILO_DEFAULT.equals(v)) {
  949.             // aggiungo informazione solo se presente
  950.             String store = getPrefixKeyStore(false, prefixKeyParam, ssl, truststore);
  951.             if(CostantiDB.MODIPA_PROFILO_DEFAULT.equals(v)) {
  952.                 map.put(store,CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_STORE_MODE_LABEL_DEFAULT);
  953.             }
  954.         }
  955.         else {
  956.            
  957.             String prefixKey = getPrefixKeyStore(true, prefixKeyParam, ssl, truststore);
  958.                        
  959.             String type = null;
  960.             String path = null;
  961.             String crl = null;
  962.             String ocsp = null;
  963.             String aliasKey = null;
  964.             boolean keystoreModePath = false;
  965.             boolean keystoreModeArchive = false;
  966.             boolean keystoreModeHsm = false;
  967.             if(ssl) {
  968.                 type = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE;
  969.                 path = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH;
  970.                 crl = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS;
  971.                 ocsp = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY;
  972.             }
  973.             else if(truststore) {
  974.                 type = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE;
  975.                 path = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH;
  976.                 crl = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS;
  977.                 ocsp = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY;
  978.             }
  979.             else {
  980.                 type = CostantiDB.MODIPA_KEYSTORE_TYPE;
  981.                 aliasKey = CostantiDB.MODIPA_KEY_ALIAS;
  982.                 String mode = getStringValue(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_MODE);
  983.                 if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(mode)) {
  984.                     keystoreModeArchive = true;
  985.                 }
  986.                 else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_PATH.equals(mode)) {
  987.                     keystoreModePath = true;
  988.                     path = CostantiDB.MODIPA_KEYSTORE_PATH;
  989.                 }
  990.                 else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_HSM.equals(mode)) {
  991.                     keystoreModeHsm = true;
  992.                 }
  993.             }
  994.            
  995.             String vType = null;
  996.             if(type!=null) {
  997.                 vType = getStringValue(protocolPropertyList, type);
  998.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_TYPE,vType);
  999.             }
  1000.            
  1001.             if(keystoreModePath) {
  1002.                 // nop
  1003.             }
  1004.            
  1005.             boolean hsm = false;
  1006.             if(ssl || truststore) {
  1007.                 if(vType!=null) {
  1008.                     hsm = HSMUtils.isKeystoreHSM(vType);
  1009.                 }
  1010.             }
  1011.             else {
  1012.                 hsm = keystoreModeHsm;
  1013.             }
  1014.             map.put(prefixKey+HSM,hsm+"");
  1015.            
  1016.             if(hsm) {
  1017.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_PATH,CostantiLabel.STORE_HSM);
  1018.             }
  1019.             else if(path!=null) {
  1020.                 String vPath = getStringValue(protocolPropertyList, path);
  1021.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_PATH,vPath);
  1022.             }
  1023.             else if(keystoreModeArchive) {
  1024.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_PATH,CostantiLabel.STORE_CARICATO_BASEDATI);
  1025.             }
  1026.            
  1027.             if(crl!=null) {
  1028.                 String vCrl = getStringValue(protocolPropertyList, crl);
  1029.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_CRLS,vCrl);
  1030.             }
  1031.            
  1032.             if(ocsp!=null) {
  1033.                 String vOcsp = getStringValue(protocolPropertyList, ocsp);
  1034.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_STORE_OCSP_POLICY,vOcsp);
  1035.             }
  1036.            
  1037.             if(aliasKey!=null) {
  1038.                 String vAliasKey = getStringValue(protocolPropertyList, aliasKey);
  1039.                 map.put(prefixKey+ API_IMPL_SICUREZZA_MESSAGGIO_KEY_ALIAS,vAliasKey);
  1040.             }
  1041.                        
  1042.         }
  1043.        
  1044.     }
  1045.        
  1046.     private static boolean isProfiloSicurezzaMessaggioConIntegritaX509(AccordoServizioParteComune api, String portType) {
  1047.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO, api, portType, false);
  1048.         if(tmp!=null && !tmp.isEmpty()) {
  1049.             for (String profiloSicurezzaMessaggio : tmp) {
  1050.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0301.equals(profiloSicurezzaMessaggio) ||
  1051.                         CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0302.equals(profiloSicurezzaMessaggio)) {
  1052.                     return true;
  1053.                 }      
  1054.             }
  1055.         }
  1056.         return false;
  1057.     }
  1058.     private static boolean isProfiloSicurezzaMessaggioConIntegritaKid(AccordoServizioParteComune api, String portType) {
  1059.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO, api, portType, false);
  1060.         if(tmp!=null && !tmp.isEmpty()) {
  1061.             for (String profiloSicurezzaMessaggio : tmp) {
  1062.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0401.equals(profiloSicurezzaMessaggio) ||
  1063.                         CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_VALUE_IDAM0402.equals(profiloSicurezzaMessaggio)) {
  1064.                     return true;
  1065.                 }      
  1066.             }
  1067.         }
  1068.         return false;
  1069.     }
  1070.     private static boolean isProfiloSicurezzaMessaggioCorniceSicurezza(AccordoServizioParteComune api, String portType) {
  1071.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA, api, portType, true);
  1072.         if(tmp!=null && !tmp.isEmpty()) {
  1073.             for (String v : tmp) {
  1074.                 if(v!=null && "true".equals(v)) {
  1075.                     return true;
  1076.                 }
  1077.             }
  1078.         }
  1079.         return false;
  1080.     }
  1081.     private static String getProfiloSicurezzaMessaggioCorniceSicurezzaPattern(AccordoServizioParteComune api, String portType) {
  1082.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN, api, portType, false);
  1083.         if(tmp!=null && !tmp.isEmpty()) {
  1084.             return tmp.get(0);
  1085.         }
  1086.         return null;
  1087.     }
  1088.     private static String getProfiloSicurezzaMessaggioCorniceSicurezzaSchema(AccordoServizioParteComune api, String portType) {
  1089.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_SCHEMA, api, portType, false);
  1090.         if(tmp!=null && !tmp.isEmpty()) {
  1091.             return tmp.get(0);
  1092.         }
  1093.         return null;
  1094.     }
  1095.     private static boolean isProfiloSicurezzaMessaggioRequestDigest(AccordoServizioParteComune api, String portType) {
  1096.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_RISPOSTA_REQUEST_DIGEST, api, portType, true);
  1097.         if(tmp!=null && !tmp.isEmpty()) {
  1098.             for (String v : tmp) {
  1099.                 if(v!=null && "true".equals(v)) {
  1100.                     return true;
  1101.                 }
  1102.             }
  1103.         }
  1104.         return false;
  1105.     }
  1106.     private static boolean isProfiloSicurezzaMessaggioConHeaderDuplicati(AccordoServizioParteComune api, String portType) {
  1107.         List<String> tmp = RegistroServiziUtils.fillPropertyProtocollo(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER, api, portType, false);
  1108.         if(tmp!=null && !tmp.isEmpty()) {
  1109.             for (String profiloSicurezzaMessaggio : tmp) {
  1110.                 if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA.equals(profiloSicurezzaMessaggio) ||
  1111.                         CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_MODIPA_AUTH_IN_RESPONSE.equals(profiloSicurezzaMessaggio) ||
  1112.                         CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM.equals(profiloSicurezzaMessaggio) ||
  1113.                         CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_HEADER_VALUE_AUTHORIZATION_CUSTOM_AUTH_IN_RESPONSE.equals(profiloSicurezzaMessaggio)) {
  1114.                     return true;
  1115.                 }      
  1116.             }
  1117.         }
  1118.         return false;
  1119.     }
  1120.    
  1121.     private static final String CLASS_MODIPA_PROPERTIES = "org.openspcoop2.protocol.modipa.config.ModIProperties";
  1122.     private static final String CLASS_MODIPA_PROPERTIES_GET_INSTANCE_METHOD = "getInstance";
  1123.    
  1124.     public static Object getModiProperties() throws ProtocolException {
  1125.         try {
  1126.             Class<?> modiPropertiesClass = Class.forName(CLASS_MODIPA_PROPERTIES);
  1127.             Method mGetInstance = modiPropertiesClass.getMethod(CLASS_MODIPA_PROPERTIES_GET_INSTANCE_METHOD);
  1128.             return mGetInstance.invoke(null);
  1129.         }catch(Exception e) {
  1130.             throw new ProtocolException(e.getMessage(),e);
  1131.         }
  1132.     }
  1133.    
  1134.     private static String getHeaderModI() throws ProtocolException {
  1135.         try {
  1136.             Object instance = getModiProperties();
  1137.             Method mGetRestSecurityTokenHeaderModI = instance.getClass().getMethod("getRestSecurityTokenHeaderModI");
  1138.             return (String) mGetRestSecurityTokenHeaderModI.invoke(instance);
  1139.         }catch(Exception e) {
  1140.             throw new ProtocolException(e.getMessage(),e);
  1141.         }
  1142.     }
  1143.    
  1144.     public static boolean isTokenOAuthUseJtiIntegrityAsMessageId() throws ProtocolException {
  1145.         try {
  1146.             Object instance = getModiProperties();
  1147.             Method mGetIsTokenOAuthUseJtiIntegrityAsMessageId = instance.getClass().getMethod("isTokenOAuthUseJtiIntegrityAsMessageId");
  1148.             return (Boolean) mGetIsTokenOAuthUseJtiIntegrityAsMessageId.invoke(instance);
  1149.         }catch(Exception e) {
  1150.             throw new ProtocolException(e.getMessage(),e);
  1151.         }
  1152.     }
  1153.    
  1154.     public static IDAccordo buildSignalHubPushIdAPI(IDSoggetto idSoggettoDefault) throws ProtocolException {
  1155.         try {
  1156.             Object instance = getModiProperties();
  1157.             Method mGetSignalHubApiName = instance.getClass().getMethod("getSignalHubApiName");
  1158.             Method mGetSignalHubApiVersion = instance.getClass().getMethod("getSignalHubApiVersion");
  1159.             return IDAccordoFactory.getInstance().getIDAccordoFromValues((String) mGetSignalHubApiName.invoke(instance), idSoggettoDefault, (Integer) mGetSignalHubApiVersion.invoke(instance));
  1160.         }catch(Exception e) {
  1161.             throw new ProtocolException(e.getMessage(),e);
  1162.         }
  1163.     }
  1164.    
  1165.     @SuppressWarnings("unchecked")
  1166.     public static List<RemoteStoreConfig> getRemoteStoreConfig() throws ProtocolException {
  1167.         try {
  1168.             Object instance = getModiProperties();
  1169.             Method mGetRemoteStoreConfig = instance.getClass().getMethod("getRemoteStoreConfig");
  1170.             return (List<RemoteStoreConfig>) mGetRemoteStoreConfig.invoke(instance);
  1171.         }catch(Exception e) {
  1172.             throw new ProtocolException(e.getMessage(),e);
  1173.         }
  1174.     }
  1175.    
  1176.     public static RemoteKeyType getRemoteKeyType(String name) throws ProtocolException {
  1177.         try {
  1178.             Object instance = getModiProperties();
  1179.             Method mGetRemoteKey = instance.getClass().getMethod("getRemoteKeyType",String.class);
  1180.             return (RemoteKeyType) mGetRemoteKey.invoke(instance,name);
  1181.         }catch(Exception e) {
  1182.             throw new ProtocolException(e.getMessage(),e);
  1183.         }
  1184.     }
  1185.    
  1186.     private static KeystoreParams getSicurezzaMessaggioCertificatiTrustStore() throws ProtocolException {
  1187.         try {
  1188.             Object instance = getModiProperties();
  1189.             Method mGet = instance.getClass().getMethod("getSicurezzaMessaggioCertificatiTrustStore");
  1190.             return (KeystoreParams) mGet.invoke(instance);
  1191.         }catch(Exception e) {
  1192.             throw new ProtocolException(e.getMessage(),e);
  1193.         }
  1194.     }
  1195.    
  1196.     private static KeystoreParams getSicurezzaMessaggioSslTrustStore() throws ProtocolException {
  1197.         try {
  1198.             Object instance = getModiProperties();
  1199.             Method mGet = instance.getClass().getMethod("getSicurezzaMessaggioSslTrustStore");
  1200.             return (KeystoreParams) mGet.invoke(instance);
  1201.         }catch(Exception e) {
  1202.             throw new ProtocolException(e.getMessage(),e);
  1203.         }
  1204.     }
  1205.    
  1206.     private static KeystoreParams getSicurezzaMessaggioCertificatiKeyStore() throws ProtocolException {
  1207.         try {
  1208.             Object instance = getModiProperties();
  1209.             Method mGet = instance.getClass().getMethod("getSicurezzaMessaggioCertificatiKeyStore");
  1210.             return (KeystoreParams) mGet.invoke(instance);
  1211.         }catch(Exception e) {
  1212.             throw new ProtocolException(e.getMessage(),e);
  1213.         }
  1214.     }
  1215.    
  1216.     public static KeystoreParams getApplicativoKeystoreParams(List<org.openspcoop2.core.config.ProtocolProperty> protocolPropertyList) {
  1217.        
  1218.         if(protocolPropertyList==null || protocolPropertyList.isEmpty()) {
  1219.             return null;
  1220.         }
  1221.        
  1222.         KeystoreParams keystoreParams = null;
  1223.        
  1224.         String sicurezza = getStringValueConfig(protocolPropertyList,CostantiDB.MODIPA_SICUREZZA_MESSAGGIO);
  1225.         if("true".equals(sicurezza)) {
  1226.            
  1227.             boolean keystoreModePath = false;
  1228.             boolean keystoreModeArchive = false;
  1229.             boolean keystoreModeHsm = false;
  1230.             String mode = getStringValueConfig(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_MODE);
  1231.             String path =null;
  1232.             String type = CostantiDB.MODIPA_KEYSTORE_TYPE;
  1233.             if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(mode)) {
  1234.                 keystoreModeArchive = true;
  1235.             }
  1236.             else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_PATH.equals(mode)) {
  1237.                 keystoreModePath = true;
  1238.                 path = CostantiDB.MODIPA_KEYSTORE_PATH;
  1239.             }
  1240.             else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_HSM.equals(mode)) {
  1241.                 keystoreModeHsm = true;
  1242.             }
  1243.            
  1244.             String vType = null;
  1245.             if(type!=null) {
  1246.                 vType = getStringValueConfig(protocolPropertyList, type);
  1247.             }
  1248.            
  1249.             if(keystoreModePath) {
  1250.                 // nop
  1251.             }
  1252.            
  1253.             String vPath = null;
  1254.             byte[] vStore = null;
  1255.             if(keystoreModeHsm) {
  1256.                 vPath = CostantiLabel.STORE_HSM;
  1257.             }
  1258.             else if(path!=null) {
  1259.                 vPath = getStringValueConfig(protocolPropertyList, path);
  1260.             }
  1261.             else if(keystoreModeArchive) {
  1262.                 vPath = CostantiLabel.STORE_CARICATO_BASEDATI;
  1263.                 vStore = getBinaryValueConfig(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_ARCHIVE);
  1264.             }
  1265.            
  1266.             String pw = CostantiDB.MODIPA_KEYSTORE_PASSWORD;
  1267.             String vPassword = getStringValueConfig(protocolPropertyList, pw);
  1268.                        
  1269.             String aliasKey = CostantiDB.MODIPA_KEY_ALIAS;
  1270.             String vAliasKey = getStringValueConfig(protocolPropertyList, aliasKey);
  1271.            
  1272.             String passwordKey = CostantiDB.MODIPA_KEY_PASSWORD;
  1273.             String vPassordKey = getStringValueConfig(protocolPropertyList, passwordKey);
  1274.            
  1275.             String vPathPublicKey = null;
  1276.             if(KeystoreType.KEY_PAIR.getNome().equals(vType)) {
  1277.                 vPathPublicKey = getStringValueConfig(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_PATH_PUBLIC_KEY);
  1278.             }
  1279.            
  1280.             String vKeyPairAlgorithm = null;
  1281.             if(KeystoreType.KEY_PAIR.getNome().equals(vType) || KeystoreType.PUBLIC_KEY.getNome().equals(vType)) {
  1282.                 vKeyPairAlgorithm = getStringValueConfig(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_KEY_ALGORITHM);
  1283.             }
  1284.            
  1285.             String byok = CostantiDB.MODIPA_KEYSTORE_BYOK_POLICY;
  1286.             String vByok = null;
  1287.             if(!keystoreModeArchive && !keystoreModeHsm) {
  1288.                 vByok = getStringValueConfig(protocolPropertyList, byok);
  1289.             }
  1290.            
  1291.             keystoreParams = new KeystoreParams();
  1292.             keystoreParams.setType(vType);
  1293.             keystoreParams.setPath(vPath);
  1294.             keystoreParams.setStore(vStore);
  1295.             keystoreParams.setPassword(vPassword);
  1296.             keystoreParams.setKeyAlias(vAliasKey);
  1297.             keystoreParams.setKeyPassword(vPassordKey);
  1298.             keystoreParams.setKeyPairPublicKeyPath(vPathPublicKey);
  1299.             keystoreParams.setKeyPairAlgorithm(vKeyPairAlgorithm);
  1300.             keystoreParams.setByokPolicy(vByok);
  1301.            
  1302.         }
  1303.    
  1304.         return keystoreParams;
  1305.     }
  1306.    
  1307.     public static byte[] getApplicativoKeystoreCertificate(List<org.openspcoop2.core.config.ProtocolProperty> protocolPropertyList) {
  1308.        
  1309.         byte[] b = null;
  1310.        
  1311.         if(protocolPropertyList==null || protocolPropertyList.isEmpty()) {
  1312.             return b;
  1313.         }
  1314.        
  1315.         String sicurezza = getStringValueConfig(protocolPropertyList,CostantiDB.MODIPA_SICUREZZA_MESSAGGIO);
  1316.         if("true".equals(sicurezza)) {
  1317.            
  1318.             return getBinaryValueConfig(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_CERTIFICATE);
  1319.            
  1320.         }
  1321.    
  1322.         return b;
  1323.     }
  1324.    
  1325.     public static boolean existsStoreConfig(List<org.openspcoop2.core.registry.ProtocolProperty> protocolPropertyList, boolean includeRemoteStore,
  1326.             boolean checkModeFruizioneKeystoreId) throws ProtocolException {
  1327.         KeystoreParams keystoreParams = null;
  1328.         try {
  1329.             keystoreParams = ModIUtils.getKeyStoreParams(protocolPropertyList,
  1330.                     checkModeFruizioneKeystoreId);
  1331.         }catch(Exception e) {
  1332.             throw new ProtocolException(e.getMessage(),e);
  1333.         }
  1334.         KeystoreParams truststoreParams = null;
  1335.         try {
  1336.             truststoreParams = ModIUtils.getTrustStoreParams(protocolPropertyList);
  1337.         }catch(Exception e) {
  1338.             throw new ProtocolException(e.getMessage(),e);
  1339.         }
  1340.         KeystoreParams truststoreSslParams = null;
  1341.         try {
  1342.             truststoreSslParams = ModIUtils.getTrustStoreSSLParams(protocolPropertyList);
  1343.         }catch(Exception e) {
  1344.             throw new ProtocolException(e.getMessage(),e);
  1345.         }
  1346.        
  1347.         boolean existsStore = keystoreParams!=null || truststoreParams!=null || truststoreSslParams!=null;
  1348.         if(!includeRemoteStore) {
  1349.             return existsStore;
  1350.         }
  1351.        
  1352.         List<RemoteStoreConfig> trustStoreRemoteConfig = null;
  1353.         try {
  1354.             trustStoreRemoteConfig = ModIUtils.getRemoteStoreConfig();
  1355.         }catch(Exception e) {
  1356.             throw new ProtocolException(e.getMessage(),e);
  1357.         }
  1358.        
  1359.         return existsStore || (trustStoreRemoteConfig!=null && !trustStoreRemoteConfig.isEmpty());
  1360.     }
  1361.    
  1362.     public static KeystoreParams getKeyStoreParams(List<org.openspcoop2.core.registry.ProtocolProperty> protocolPropertyList,
  1363.             boolean checkModeFruizioneKeystoreId) throws ProtocolException {
  1364.         return getKeystoreParamsEngine(protocolPropertyList, false, false,
  1365.                 checkModeFruizioneKeystoreId);
  1366.     }
  1367.     public static KeystoreParams getTrustStoreParams(List<org.openspcoop2.core.registry.ProtocolProperty> protocolPropertyList) throws ProtocolException {
  1368.         return getKeystoreParamsEngine(protocolPropertyList, false, true,
  1369.                 false);
  1370.     }
  1371.     public static KeystoreParams getTrustStoreSSLParams(List<org.openspcoop2.core.registry.ProtocolProperty> protocolPropertyList) throws ProtocolException {
  1372.         return getKeystoreParamsEngine(protocolPropertyList, true, false,
  1373.                 false);
  1374.     }
  1375.     private static KeystoreParams getKeystoreParamsEngine(List<org.openspcoop2.core.registry.ProtocolProperty> protocolPropertyList,
  1376.             boolean ssl, boolean truststore,
  1377.             boolean checkModeFruizioneKeystoreId) throws ProtocolException {
  1378.                
  1379.         if(protocolPropertyList==null || protocolPropertyList.isEmpty()) {
  1380.             return null;
  1381.         }
  1382.        
  1383.         if(checkModeFruizioneKeystoreId) {
  1384.             String v = getStringValue(protocolPropertyList, CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE);
  1385.             if(
  1386.                     v!=null && !StringUtils.isEmpty(v) && // aggiungo questo controllo per evitare che nel caso di API con solo pattern ID_AUTH_REST_01 via PDND dove non viene visualizzato 'MODIPA_PROFILO_SICUREZZA_MESSAGGIO_FRUIZIONE_KEYSTORE_MODE' si esca e non si controlli i certificati
  1387.                     !CostantiDB.MODIPA_KEYSTORE_FRUIZIONE.equals(v)) {
  1388.                 return null;
  1389.             }
  1390.         }
  1391.        
  1392.         KeystoreParams keystoreParams = null;
  1393.        
  1394.         String id = null;
  1395.         if(ssl) {
  1396.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_MODE;
  1397.         }
  1398.         else if(truststore) {
  1399.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_MODE;
  1400.         }
  1401.         else {
  1402.             id = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE;
  1403.         }
  1404.        
  1405.         String v = getStringValue(protocolPropertyList, id);
  1406.         if(v!=null && !StringUtils.isEmpty(v) && !CostantiDB.MODIPA_PROFILO_UNDEFINED.equals(v)) {
  1407.             if(CostantiDB.MODIPA_PROFILO_DEFAULT.equals(v)) {
  1408.                 if(ssl) {
  1409.                     keystoreParams = ModIUtils.getSicurezzaMessaggioSslTrustStore();
  1410.                 }
  1411.                 else if(truststore) {
  1412.                     keystoreParams = ModIUtils.getSicurezzaMessaggioCertificatiTrustStore();
  1413.                 }
  1414.                 else {
  1415.                     keystoreParams = ModIUtils.getSicurezzaMessaggioCertificatiKeyStore();
  1416.                 }
  1417.             }
  1418.             else if(CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(v)) {
  1419.                
  1420.                 String type = null;
  1421.                 String path = null;
  1422.                 String archive = null;
  1423.                 String pw = null;
  1424.                 String crl = null;
  1425.                 String ocsp = null;
  1426.                 String aliasKey = null;
  1427.                 String pwKey = null;
  1428.                 String byok = null;
  1429.                 boolean keystoreModePath = false;
  1430.                 boolean keystoreModeArchive = false;
  1431.                 boolean keystoreModeHsm = false;
  1432.                 if(ssl) {
  1433.                     type = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_TYPE;
  1434.                     path = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH;
  1435.                     pw = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD;
  1436.                     crl = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS;
  1437.                     ocsp = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_OCSP_POLICY;
  1438.                 }
  1439.                 else if(truststore) {
  1440.                     type = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_TYPE;
  1441.                     path = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH;
  1442.                     pw = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD;
  1443.                     crl = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS;
  1444.                     ocsp = CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_OCSP_POLICY;
  1445.                 }
  1446.                 else {
  1447.                     type = CostantiDB.MODIPA_KEYSTORE_TYPE;
  1448.                     pw = CostantiDB.MODIPA_KEYSTORE_PASSWORD;
  1449.                     aliasKey = CostantiDB.MODIPA_KEY_ALIAS;
  1450.                     pwKey = CostantiDB.MODIPA_KEY_PASSWORD;
  1451.                     String mode = getStringValue(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_MODE);
  1452.                     if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(mode)) {
  1453.                         keystoreModeArchive = true;
  1454.                         archive = CostantiDB.MODIPA_KEYSTORE_ARCHIVE;
  1455.                     }
  1456.                     else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_PATH.equals(mode)) {
  1457.                         keystoreModePath = true;
  1458.                         path = CostantiDB.MODIPA_KEYSTORE_PATH;
  1459.                         byok = CostantiDB.MODIPA_KEYSTORE_BYOK_POLICY;
  1460.                     }
  1461.                     else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_HSM.equals(mode)) {
  1462.                         keystoreModeHsm = true;
  1463.                     }
  1464.                 }
  1465.                
  1466.                 String vType = null;
  1467.                 if(type!=null) {
  1468.                     vType = getStringValue(protocolPropertyList, type);
  1469.                 }
  1470.                
  1471.                 if(keystoreModePath) {
  1472.                     // nop
  1473.                 }
  1474.                
  1475.                 String vPassword = null;
  1476.                 if(pw!=null) {
  1477.                     vPassword = getStringValue(protocolPropertyList, pw);
  1478.                 }
  1479.                
  1480.                 boolean hsm = false;
  1481.                 if(ssl || truststore) {
  1482.                     if(vType!=null) {
  1483.                         hsm = HSMUtils.isKeystoreHSM(vType);
  1484.                     }
  1485.                 }
  1486.                 else {
  1487.                     hsm = keystoreModeHsm;
  1488.                 }
  1489.                
  1490.                 String vPath = null;
  1491.                 byte[] vStore = null;
  1492.                 if(hsm) {
  1493.                     vPath = CostantiLabel.STORE_HSM;
  1494.                 }
  1495.                 else if(path!=null) {
  1496.                     vPath = getStringValue(protocolPropertyList, path);
  1497.                 }
  1498.                 else if(keystoreModeArchive) {
  1499.                     vPath = CostantiLabel.STORE_CARICATO_BASEDATI;
  1500.                     vStore = getBinaryValue(protocolPropertyList, archive);
  1501.                 }
  1502.                
  1503.                 String vCrl = null;
  1504.                 if(crl!=null) {
  1505.                     vCrl = getStringValue(protocolPropertyList, crl);
  1506.                 }
  1507.                
  1508.                 String vOcsp = null;
  1509.                 if(ocsp!=null) {
  1510.                     vOcsp = getStringValue(protocolPropertyList, ocsp);
  1511.                 }
  1512.                
  1513.                 String vAliasKey = null;
  1514.                 if(aliasKey!=null) {
  1515.                     vAliasKey = getStringValue(protocolPropertyList, aliasKey);
  1516.                 }
  1517.                
  1518.                 String vPasswordKey = null;
  1519.                 if(pwKey!=null) {
  1520.                     vPasswordKey = getStringValue(protocolPropertyList, pwKey);
  1521.                 }
  1522.                
  1523.                 String vPathPublicKey = null;
  1524.                 if(KeystoreType.KEY_PAIR.getNome().equals(vType)) {
  1525.                     vPathPublicKey = getStringValue(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_PATH_PUBLIC_KEY);
  1526.                 }
  1527.                
  1528.                 String vKeyPairAlgorithm = null;
  1529.                 if(KeystoreType.KEY_PAIR.getNome().equals(vType) || KeystoreType.PUBLIC_KEY.getNome().equals(vType)) {
  1530.                     vKeyPairAlgorithm = getStringValue(protocolPropertyList, CostantiDB.MODIPA_KEYSTORE_KEY_ALGORITHM);
  1531.                 }
  1532.                
  1533.                 String vByok = null;
  1534.                 if(byok!=null) {
  1535.                     vByok = getStringValue(protocolPropertyList, byok);
  1536.                 }
  1537.                
  1538.                 keystoreParams = new KeystoreParams();
  1539.                 keystoreParams.setType(vType);
  1540.                 keystoreParams.setPath(vPath);
  1541.                 keystoreParams.setStore(vStore);
  1542.                 keystoreParams.setPassword(vPassword);
  1543.                 keystoreParams.setCrls(vCrl);
  1544.                 keystoreParams.setOcspPolicy(vOcsp);
  1545.                 keystoreParams.setKeyAlias(vAliasKey);
  1546.                 keystoreParams.setKeyPassword(vPasswordKey);
  1547.                 keystoreParams.setKeyPairPublicKeyPath(vPathPublicKey);
  1548.                 keystoreParams.setKeyPairAlgorithm(vKeyPairAlgorithm);
  1549.                 keystoreParams.setByokPolicy(vByok);
  1550.             }
  1551.         }
  1552.    
  1553.         return keystoreParams;
  1554.     }

  1555.    
  1556.     private static String getStringValue(List<ProtocolProperty> protocolPropertyList, String id) {
  1557.         for (ProtocolProperty protocolProperty : protocolPropertyList) {
  1558.             if(protocolProperty.getName().equals(id)) {
  1559.                 if(StringUtils.isNotEmpty(protocolProperty.getValue())) {
  1560.                     return protocolProperty.getValue();
  1561.                 }
  1562.                 else if(protocolProperty.getNumberValue()!=null) {
  1563.                     return protocolProperty.getNumberValue().toString();
  1564.                 }
  1565.                 else if(protocolProperty.getBooleanValue()!=null) {
  1566.                     return protocolProperty.getBooleanValue().toString();
  1567.                 }
  1568.                 else if(protocolProperty.getByteFile()!=null) {
  1569.                     return "Archivio binario";
  1570.                 }
  1571.                 else {
  1572.                     return null;
  1573.                 }
  1574.             }
  1575.         }
  1576.         return null;
  1577.     }
  1578.     private static String getBooleanValueAsStato(List<ProtocolProperty> protocolPropertyList, String id) {
  1579.         for (ProtocolProperty protocolProperty : protocolPropertyList) {
  1580.             if(protocolProperty.getName().equals(id)) {
  1581.                 return protocolProperty.getBooleanValue()!=null && protocolProperty.getBooleanValue() ?
  1582.                         StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue();
  1583.             }
  1584.         }
  1585.         return null;
  1586.     }
  1587.     static byte[] getBinaryValue(List<ProtocolProperty> protocolPropertyList, String id) {
  1588.         byte[] b = null;
  1589.         for (ProtocolProperty protocolProperty : protocolPropertyList) {
  1590.             if(protocolProperty.getName().equals(id)) {
  1591.                 return protocolProperty.getByteFile();
  1592.             }
  1593.         }
  1594.         return b;
  1595.     }
  1596.    
  1597.     private static String getStringValueConfig(List<org.openspcoop2.core.config.ProtocolProperty> protocolPropertyList, String id) {
  1598.         for (org.openspcoop2.core.config.ProtocolProperty protocolProperty : protocolPropertyList) {
  1599.             if(protocolProperty.getName().equals(id)) {
  1600.                 if(StringUtils.isNotEmpty(protocolProperty.getValue())) {
  1601.                     return protocolProperty.getValue();
  1602.                 }
  1603.                 else if(protocolProperty.getNumberValue()!=null) {
  1604.                     return protocolProperty.getNumberValue().toString();
  1605.                 }
  1606.                 else if(protocolProperty.getBooleanValue()!=null) {
  1607.                     return protocolProperty.getBooleanValue().toString();
  1608.                 }
  1609.                 else if(protocolProperty.getByteFile()!=null) {
  1610.                     return "Archivio binario";
  1611.                 }
  1612.                 else {
  1613.                     return null;
  1614.                 }
  1615.             }
  1616.         }
  1617.         return null;
  1618.     }
  1619.     static String getBooleanValueAsStatoConfig(List<org.openspcoop2.core.config.ProtocolProperty> protocolPropertyList, String id) {
  1620.         for (org.openspcoop2.core.config.ProtocolProperty protocolProperty : protocolPropertyList) {
  1621.             if(protocolProperty.getName().equals(id)) {
  1622.                 return protocolProperty.getBooleanValue()!=null && protocolProperty.getBooleanValue() ?
  1623.                         StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue();
  1624.             }
  1625.         }
  1626.         return null;
  1627.     }
  1628.     private static byte[] getBinaryValueConfig(List<org.openspcoop2.core.config.ProtocolProperty> protocolPropertyList, String id) {
  1629.         byte[] b = null;
  1630.         for (org.openspcoop2.core.config.ProtocolProperty protocolProperty : protocolPropertyList) {
  1631.             if(protocolProperty.getName().equals(id)) {
  1632.                 return protocolProperty.getByteFile();
  1633.             }
  1634.         }
  1635.         return b;
  1636.     }
  1637.    
  1638.     public static final String PROPRIETA_INTERMEDIARIO = "intermediario";
  1639.     public static boolean isSoggettoCanaleIntermediario(Soggetto soggettoCanale, Logger log) {
  1640.         try {
  1641.             if(soggettoCanale.sizeProprietaList()>0) {
  1642.                 for (Proprieta proprieta :soggettoCanale.getProprieta()) {
  1643.                     if(PROPRIETA_INTERMEDIARIO.equals(proprieta.getNome())) {
  1644.                         return "true".equalsIgnoreCase(proprieta.getValore());
  1645.                     }
  1646.                 }
  1647.             }
  1648.         }catch(Exception e) {
  1649.             log.error("[isSoggettoCanaleIntermediario] Process failed: "+e.getMessage(),e);
  1650.         }
  1651.         return false;
  1652.     }
  1653.    
  1654.     public static String getMessaggioErroreDominioCanaleDifferenteDominioApplicativo(IDServizioApplicativo idServizioApplicativoMessaggio, IDSoggetto idSoggettoMittenteCanale) {
  1655.         return "Token di sicurezza firmato da un applicativo '"+idServizioApplicativoMessaggio.getNome()+
  1656.                 "' risiedente nel dominio del soggetto '"+idServizioApplicativoMessaggio.getIdSoggettoProprietario().toString()+"'; il dominio differisce dal soggetto identificato sul canale di trasporto ("+idSoggettoMittenteCanale+
  1657.                 ")";
  1658.     }
  1659.    
  1660.     public static String convertProfiloSicurezzaToSDKValue(String securityMessageProfile, boolean rest) {
  1661.         String profilo = securityMessageProfile.toUpperCase();
  1662.         if(rest) {
  1663.             profilo = profilo.replace("M", "R");
  1664.         }
  1665.         else {
  1666.             profilo = profilo.replace("M", "S");
  1667.         }
  1668.         return profilo;
  1669.     }
  1670.     public static String convertProfiloSicurezzaToConfigurationValue(String securityMessageProfileSDKValue) {
  1671.         String securityMessageProfile = securityMessageProfileSDKValue.toLowerCase();
  1672.         securityMessageProfile = securityMessageProfile.replace("r", "m");
  1673.         securityMessageProfile = securityMessageProfile.replace("s", "m");
  1674.         return securityMessageProfile;
  1675.     }
  1676.    
  1677.     public static String convertProfiloSicurezzaSorgenteTokenToSDKValue(String sorgenteToken) {
  1678.         if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_LOCALE.equals(sorgenteToken)) {
  1679.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_LOCALE;
  1680.         }
  1681.         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_PDND.equals(sorgenteToken)) {
  1682.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_PDND;
  1683.         }
  1684.         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_OAUTH.equals(sorgenteToken)) {
  1685.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_OAUTH;
  1686.         }
  1687.         else {
  1688.             // backward compatibility
  1689.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_LOCALE;
  1690.         }
  1691.     }
  1692.     public static String convertProfiloSicurezzaSorgenteTokenToConfigurationValue(String sorgenteTokenSDKValue) throws ProtocolException {
  1693.         if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_LOCALE.equals(sorgenteTokenSDKValue)) {
  1694.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_LOCALE;
  1695.         }
  1696.         else if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_PDND.equals(sorgenteTokenSDKValue)) {
  1697.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_PDND;
  1698.         }
  1699.         else if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_OAUTH.equals(sorgenteTokenSDKValue)) {
  1700.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SORGENTE_TOKEN_IDAUTH_VALUE_OAUTH;
  1701.         }
  1702.         throw newProtocolExceptionUnknown("Source label",sorgenteTokenSDKValue);
  1703.     }
  1704.    
  1705.    
  1706.     public static String convertProfiloAuditToSDKValue(String patternCorniceSicurezza) throws ProtocolException {
  1707.         if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD.equals(patternCorniceSicurezza)) {
  1708.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD;
  1709.         }
  1710.         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01.equals(patternCorniceSicurezza)) {
  1711.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01;
  1712.         }
  1713.         else if(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02.equals(patternCorniceSicurezza)) {
  1714.             return CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02;
  1715.         }
  1716.         throw newProtocolExceptionUnknown("Pattern value",patternCorniceSicurezza);
  1717.     }
  1718.     public static String convertProfiloAuditToConfigurationValue(String patternCorniceSicurezzaSDKValue) throws ProtocolException {
  1719.         if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD.equals(patternCorniceSicurezzaSDKValue)) {
  1720.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_OLD;
  1721.         }
  1722.         else if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01.equals(patternCorniceSicurezzaSDKValue)) {
  1723.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_01;
  1724.         }
  1725.         else if(CostantiLabel.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02.equals(patternCorniceSicurezzaSDKValue)) {
  1726.             return CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_AUDIT_REST_02;
  1727.         }
  1728.         throw newProtocolExceptionUnknown("Pattern label",patternCorniceSicurezzaSDKValue);
  1729.     }
  1730.    
  1731.     public static ProtocolException newProtocolExceptionUnknown(String prefix, String value) {
  1732.         return new ProtocolException(prefix+" '"+value+"' unknown");
  1733.     }
  1734.    
  1735.    
  1736.     public static final MapKey<String> MODIPA_OPENSPCOOP2_MSG_CONTEXT_USE_JTI_AUTHORIZATION = org.openspcoop2.utils.Map.newMapKey("MODIPA_USE_JTI_AUTHORIZATION");
  1737.     public static boolean useJtiAuthorizationObject(OpenSPCoop2Message msg) {
  1738.         Object useJtiAuthorizationObject = msg.getContextProperty(MODIPA_OPENSPCOOP2_MSG_CONTEXT_USE_JTI_AUTHORIZATION);
  1739.         boolean useJtiAuthorization = false;
  1740.         if(useJtiAuthorizationObject instanceof Boolean) {
  1741.             useJtiAuthorization = (Boolean) useJtiAuthorizationObject;
  1742.         }
  1743.         return useJtiAuthorization;
  1744.     }
  1745.     public static void replaceBustaIdWithJtiTokenId(ModIValidazioneSemanticaProfiloSicurezza modIValidazioneSemanticaProfiloSicurezza, String jtiClaimReceived) {
  1746.         if(jtiClaimReceived!=null && !StringUtils.isEmpty(jtiClaimReceived)) {
  1747.             Busta busta = modIValidazioneSemanticaProfiloSicurezza.getBusta();
  1748.             String idIntegrity = busta.getID();
  1749.             busta.removeProperty(CostantiDB.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_ID);
  1750.             if(modIValidazioneSemanticaProfiloSicurezza.isSicurezzaMessaggio()) {
  1751.                 busta.addProperty(CostantiDB.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_ID, idIntegrity);
  1752.             }
  1753.             busta.setID(jtiClaimReceived);
  1754.         }
  1755.     }
  1756.    
  1757.     public static String readJti(String token, Logger log) {
  1758.         try {
  1759.             if(token!=null && token.contains(".")) {
  1760.                 String [] tmp = token.split("\\.");
  1761.                 if(tmp!=null && tmp.length>=3) {
  1762.                     String jsonBase64 = tmp[1];
  1763.                     String json = new String(Base64Utilities.decode(jsonBase64.getBytes()));
  1764.                     return JsonPathExpressionEngine.extractAndConvertResultAsString(json, "$.jti", log);
  1765.                 }
  1766.             }
  1767.         }catch(Exception e) {
  1768.             // ignore
  1769.         }
  1770.         return null;
  1771.     }

  1772. }