ModIDynamicConfigurationAccordiParteSpecificaUtilities.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package org.openspcoop2.protocol.modipa.properties;

import java.util.List;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.mvc.properties.provider.InputValidationUtils;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.constants.ServiceBinding;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.pdd.core.dynamic.DynamicHelperCostanti;
import org.openspcoop2.pdd.core.token.parser.Claims;
import org.openspcoop2.protocol.engine.constants.Costanti;
import org.openspcoop2.protocol.modipa.config.ModIProperties;
import org.openspcoop2.protocol.modipa.constants.ModIConsoleCostanti;
import org.openspcoop2.protocol.modipa.utils.SOAPHeader;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
import org.openspcoop2.protocol.sdk.properties.AbstractConsoleItem;
import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
import org.openspcoop2.protocol.sdk.properties.IConsoleHelper;
import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
import org.openspcoop2.protocol.sdk.properties.StringProperty;
import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
import org.openspcoop2.protocol.utils.ModISecurityUtils;
import org.openspcoop2.utils.properties.PropertiesUtilities;

/**
 * ModIDynamicConfigurationAccordiParteSpecificaUtilities
 *
 * @author Poli Andrea (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class ModIDynamicConfigurationAccordiParteSpecificaUtilities {
	
	private ModIDynamicConfigurationAccordiParteSpecificaUtilities() {}

	private static String getErrorLetturaAPIFallita(Exception e) {
		return "Lettura API fallita: "+e.getMessage();
	}
	static ConsoleConfiguration getDynamicConfigParteSpecifica(ModIProperties modiProperties,
			ConsoleOperationType consoleOperationType,
			IConsoleHelper consoleHelper, IRegistryReader registryReader,
			IConfigIntegrationReader configIntegrationReader, IDServizio id, IDSoggetto idFruitore, boolean fruizioni) throws ProtocolException {
		
		if(consoleHelper.isModalitaCompleta()) {
			return null;
		}
		if(ConsoleOperationType.DEL.equals(consoleOperationType)) {
			return null;
		}
		if(!isMascheraGestioneFruizioneOrErogazione(consoleHelper)) {
			return null;
		}
		boolean casoSpecialeModificaNomeFruizione = !fruizioni && isMascheraGestioneFruizione(consoleHelper);
		
		// Identificazione API
		AccordoServizioParteComune api = null;
		String portType = null; 
		try {
			if(id!=null && id.getUriAccordoServizioParteComune()!=null) {
				IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(id.getUriAccordoServizioParteComune());
				api = registryReader.getAccordoServizioParteComune(idAccordo, false, false);
			}
			
			portType = consoleHelper.getParameter(Costanti.CONSOLE_PARAMETRO_APS_PORT_TYPE);
			if((portType==null || "".equals(portType)) && id!=null) {
				portType = id.getPortType();
			}
			
		}catch(Exception e) {
			throw new ProtocolException(getErrorLetturaAPIFallita(e),e);
		}
		if(api==null) {
			return null;
		}
		
		boolean rest = ServiceBinding.REST.equals(api.getServiceBinding());
		ConsoleConfiguration configuration = new ConsoleConfiguration();
				
		boolean corniceSicurezza = ModISecurityUtils.isProfiloSicurezzaMessaggioCorniceSicurezza(api, portType);
		String patternDatiCorniceSicurezza = null;
		String schemaDatiCorniceSicurezza = null;
		if(corniceSicurezza) {
			patternDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaPattern(api, portType);
			if(patternDatiCorniceSicurezza==null) {
				// backward compatibility
				patternDatiCorniceSicurezza = ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD;
			}
			if(!ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza)) {
				schemaDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaSchema(api, portType);
			}
		}
		
		// Identificazione se è richiesta la sicurezza
		if(ModISecurityUtils.isSicurezzaMessaggioRequired(api, portType)) {
		
			boolean digest = ModISecurityUtils.isProfiloSicurezzaMessaggioConIntegrita(api, portType);
			
			boolean headerDuplicati = false;
			boolean riferimentoX509 = false;
			boolean kidMode = false;
			if(rest) {
				headerDuplicati = ModISecurityUtils.isProfiloSicurezzaMessaggioConHeaderDuplicati(api, portType);
				riferimentoX509 = ModISecurityUtils.isSicurezzaMessaggioRiferimentoX509Required(api, portType);
				kidMode =  ModISecurityUtils.isSicurezzaMessaggioKidModeSupported(api, portType);
			}
			
			boolean tokenNonLocale = true;
			if(rest || fruizioni) {
				tokenNonLocale = ModISecurityUtils.isProfiloSicurezzaMessaggioConSorgenteTokenNonLocale(api, portType, rest);	
			}
			
			if(ModISecurityUtils.isProfiloSicurezzaMessaggioApplicabileRichiesta(api, portType, true)) {
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.addSicurezzaMessaggio(modiProperties,
					configuration, rest, fruizioni, true, casoSpecialeModificaNomeFruizione, digest, 
					patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
					headerDuplicati,
					consoleOperationType, consoleHelper, registryReader, configIntegrationReader, id, idFruitore,
					riferimentoX509, kidMode,
					false, 
					tokenNonLocale);
			}
			if(ModISecurityUtils.isProfiloSicurezzaMessaggioApplicabileRisposta(api, portType, true)) {
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.addSicurezzaMessaggio(modiProperties,
					configuration, rest, fruizioni, false, casoSpecialeModificaNomeFruizione, digest, 
					patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
					headerDuplicati,
					consoleOperationType, consoleHelper, registryReader, configIntegrationReader, id, idFruitore,
					riferimentoX509, kidMode,
					false, 
					tokenNonLocale);
			}
			
			return configuration;
			
		}
		else {
			
			// Sicurezza Audit
			
			if( corniceSicurezza && !ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza) &&
				schemaDatiCorniceSicurezza!=null) {
					
				boolean forceRest = true;
				
				boolean tokenNonLocale = false;
				if(fruizioni) {
					tokenNonLocale = ModISecurityUtils.isProfiloSicurezzaMessaggioConSorgenteTokenNonLocale(api, portType, rest);	
				}
				
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.addSicurezzaMessaggio(modiProperties,
						configuration, forceRest, fruizioni, true, casoSpecialeModificaNomeFruizione, 
						false,  // digest
						patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
						false, // headerDuplicati
						consoleOperationType, consoleHelper, registryReader, configIntegrationReader, id, idFruitore,
						false, // riferimentoX509
						false, // kidMode
						true, // audit
						tokenNonLocale // tokenNonLocale
						); 
				
				return configuration; // NOTA: contiene già i dati richiesti in sicurezza OAuth
				
			}
			
			
			// Sicurezza OAuth
			
			if( fruizioni ) {
				boolean sicurezzaMessaggioNonPresente = false;
				boolean tokenSignedJWT = ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.addSicurezzaTokenSignedJWT(rest,
						configuration,
						consoleOperationType, consoleHelper, 
						registryReader, configIntegrationReader, 
						id, idFruitore,
						sicurezzaMessaggioNonPresente);
				
				if(tokenSignedJWT) {
					/**this.addKeStoreConfigOAuth_choice(configuration);*/
					ModIDynamicConfigurationKeystoreUtilities.addTrustStoreKeystoreFruizioneOAuthConfigChoice(configuration);
					
					/**boolean requiredValue = casoSpecialeModificaNomeFruizione ? false : true;*/
					boolean requiredValue = true;
					ModIDynamicConfigurationKeystoreUtilities.addKeystoreConfig(configuration, true, false, requiredValue);
				
					return configuration;
				}
			}
			
			
		}
		
		return null;
		
	}
	
	static boolean updateDynamicConfigParteSpecifica(ModIProperties modiProperties,
			ConsoleConfiguration consoleConfiguration,
			ConsoleOperationType consoleOperationType, IConsoleHelper consoleHelper, ProtocolProperties properties,
			IDServizio id, IRegistryReader registryReader, boolean fruizioni) throws ProtocolException {
		if(consoleHelper.isModalitaCompleta()) {
			return false;
		}
		if(ConsoleOperationType.DEL.equals(consoleOperationType)) {
			return false;
		}
		if(!isMascheraGestioneFruizioneOrErogazione(consoleHelper)) {
			return false;
		}
		boolean casoSpecialeModificaNomeFruizione = !fruizioni && isMascheraGestioneFruizione(consoleHelper);
		
		// Identificazione API
		AccordoServizioParteComune api = null;
		String portType = null; 
		try {
			if(id!=null && id.getUriAccordoServizioParteComune()!=null) {
				IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(id.getUriAccordoServizioParteComune());
				api = registryReader.getAccordoServizioParteComune(idAccordo, false, false);
			}
			
			portType = consoleHelper.getParameter(Costanti.CONSOLE_PARAMETRO_APS_PORT_TYPE);
			if((portType==null || "".equals(portType)) && id!=null) {
				portType = id.getPortType();
			}
			
		}catch(Exception e) {
			throw new ProtocolException(getErrorLetturaAPIFallita(e),e);
		}
		if(api==null) {
			return false;
		}
		boolean rest = ServiceBinding.REST.equals(api.getServiceBinding());
		
		boolean corniceSicurezza = ModISecurityUtils.isProfiloSicurezzaMessaggioCorniceSicurezza(api, portType);
		String patternDatiCorniceSicurezza = null;
		String schemaDatiCorniceSicurezza = null;
		if(corniceSicurezza) {
			patternDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaPattern(api, portType);
			if(patternDatiCorniceSicurezza==null) {
				// backward compatibility
				patternDatiCorniceSicurezza = ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD;
			}
			if(!ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza)) {
				schemaDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaSchema(api, portType);
			}
		}
		
		// Identificazione se è richiesta la sicurezza
		if(ModISecurityUtils.isSicurezzaMessaggioRequired(api, portType)) {
					
			boolean headerDuplicati = false;
			if(rest) {
				headerDuplicati = ModISecurityUtils.isProfiloSicurezzaMessaggioConHeaderDuplicati(api, portType);
			}
			
			boolean kidMode = ModISecurityUtils.isSicurezzaMessaggioKidModeSupported(api, portType);
			
			boolean tokenNonLocale = ModISecurityUtils.isProfiloSicurezzaMessaggioConSorgenteTokenNonLocale(api, portType, rest);
			
			if(ModISecurityUtils.isProfiloSicurezzaMessaggioApplicabileRichiesta(api, portType, true)) {
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.updateSicurezzaMessaggio(modiProperties,
					consoleConfiguration, properties, rest, fruizioni, true, casoSpecialeModificaNomeFruizione, 
					patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
					headerDuplicati, consoleHelper,
					kidMode,
					tokenNonLocale);
			}
			if(ModISecurityUtils.isProfiloSicurezzaMessaggioApplicabileRisposta(api, portType, true)) {
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.updateSicurezzaMessaggio(modiProperties,
					consoleConfiguration, properties, rest, fruizioni, false, casoSpecialeModificaNomeFruizione, 
					patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
					headerDuplicati, consoleHelper,
					kidMode,
					tokenNonLocale);
			}
			
		}
		else {
			
			// Sicurezza Audit
			
			if( corniceSicurezza && !ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza) &&
					schemaDatiCorniceSicurezza!=null) {
					
				boolean forceRest = true;
				
				boolean kidMode = true;
				
				ModIDynamicConfigurationAccordiParteSpecificaSicurezzaMessaggioUtilities.updateSicurezzaMessaggio(modiProperties,
						consoleConfiguration, properties, forceRest, fruizioni, true, casoSpecialeModificaNomeFruizione, 
						patternDatiCorniceSicurezza, schemaDatiCorniceSicurezza,
						false, // headerDuplicati
						consoleHelper,
						kidMode,
						false // tokenNonLocale
						);
				
			}
			
			
			// Sicurezza OAuth
			
			if(fruizioni) {
				
				/**boolean requiredValue = casoSpecialeModificaNomeFruizione ? false : true;*/
				boolean requiredValue = true;
				
				boolean hideSceltaArchivioFilePath = false;
				boolean addHiddenSubjectIssuer = false;
				
				/**boolean checkRidefinisciOauth = true;*/
				boolean checkRidefinisciOauth = false;
				
				rest = true; // forzo comportamento come fosse REST poichè si tratta della configurazione necessaria per generare token JWT
				
				ModIDynamicConfigurationKeystoreUtilities.updateKeystoreConfig(consoleConfiguration, properties, true, checkRidefinisciOauth,
						hideSceltaArchivioFilePath, addHiddenSubjectIssuer, 
						requiredValue, null,
						rest);
			}
			
		}
		
		return true;
	}
	
	private static final String PREFIX_VERIFICATO_QUANTO_INDICATO_IN = "Verificare quanto indicato in ";
	
	static boolean validateDynamicConfigParteSpecifica(ModIProperties modiProperties,
			ConsoleConfiguration consoleConfiguration, IConsoleHelper consoleHelper, ProtocolProperties properties, IDServizio id,
			IRegistryReader registryReader, boolean fruizioni) throws ProtocolException {
		
		if(!isMascheraGestioneFruizioneOrErogazione(consoleHelper)) {
			return false;
		}
		boolean casoSpecialeModificaNomeFruizione = !fruizioni && isMascheraGestioneFruizione(consoleHelper);
		if(casoSpecialeModificaNomeFruizione) {
			return false;
		}
		
		AccordoServizioParteComune api = null;
		String portType = null; 
		try {
			if(id!=null && id.getUriAccordoServizioParteComune()!=null) {
				IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(id.getUriAccordoServizioParteComune());
				api = registryReader.getAccordoServizioParteComune(idAccordo, false, false);
			}
			
			portType = consoleHelper.getParameter(Costanti.CONSOLE_PARAMETRO_APS_PORT_TYPE);
			if((portType==null || "".equals(portType)) && id!=null) {
				portType = id.getPortType();
			}
			
		}catch(Exception e) {
			throw new ProtocolException(getErrorLetturaAPIFallita(e),e);
		}
		if(api==null) {
			return false;
		}
		
		
		boolean corniceSicurezza = ModISecurityUtils.isProfiloSicurezzaMessaggioCorniceSicurezza(api, portType);
		String patternDatiCorniceSicurezza = null;
		String schemaDatiCorniceSicurezza = null;
		if(corniceSicurezza) {
			patternDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaPattern(api, portType);
			if(patternDatiCorniceSicurezza==null) {
				// backward compatibility
				patternDatiCorniceSicurezza = ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD;
			}
			if(!ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza)) {
				schemaDatiCorniceSicurezza = ModISecurityUtils.getProfiloSicurezzaMessaggioCorniceSicurezzaSchema(api, portType);
			}
		}
		
		
		// Sicurezza Audit
		boolean sicurezzaAudit = false;
		if( fruizioni  &&
				corniceSicurezza && !ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza) &&
				schemaDatiCorniceSicurezza!=null) {
			sicurezzaAudit = true;
		}
		
		
		// Identificazione se è richiesta la sicurezza
		if(ModISecurityUtils.isSicurezzaMessaggioRequired(api, portType) || sicurezzaAudit) {
			
			AbstractConsoleItem<?> profiloSicurezzaMessaggioHttpHeadersItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST_ID
							);
			if(profiloSicurezzaMessaggioHttpHeadersItem!=null) {
				
				StringProperty profiloSicurezzaMessaggioHttpHeadersItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST_ID);
				if(profiloSicurezzaMessaggioHttpHeadersItemValue!=null && profiloSicurezzaMessaggioHttpHeadersItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioHttpHeadersItemValue.getValue())) {
					try {
						String [] hdrObbligatori = modiProperties.getRestSecurityTokenSignedHeaders();
						if(hdrObbligatori!=null && hdrObbligatori.length>0) {
							
							String [] hdrImpostati = profiloSicurezzaMessaggioHttpHeadersItemValue.getValue().split(",");
							if(hdrImpostati==null || hdrImpostati.length<=0) {
								throw new ProtocolException("Nessun header indicato");
							}
							
							for (String hdrObbligatorio : hdrObbligatori) {
								boolean found = false;
								for (String hdrImpostato : hdrImpostati) {
									if(hdrImpostato.equalsIgnoreCase(hdrObbligatorio)) {
										found = true;
										break;
									}
								}
								if(!found) {
									throw new ProtocolException("Header obbligatorio '"+hdrObbligatorio+"' non indicato");
								}
							}
							
						}
					}catch(Exception e) {
						throw new ProtocolException(PREFIX_VERIFICATO_QUANTO_INDICATO_IN+ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST_LABEL+": "+e.getMessage(),e);
					}
				}
				else {
					throw new ProtocolException(PREFIX_VERIFICATO_QUANTO_INDICATO_IN+ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_HTTP_HEADERS_REST_LABEL+": nessun header indicato");
				}
				
			}
			
			AbstractConsoleItem<?> profiloSicurezzaMessaggioSoapHeadersItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP_ID
							);
			if(profiloSicurezzaMessaggioSoapHeadersItem!=null) {
				
				StringProperty profiloSicurezzaMessaggioSoapHeadersItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP_ID);
				if(profiloSicurezzaMessaggioSoapHeadersItemValue!=null && profiloSicurezzaMessaggioSoapHeadersItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioSoapHeadersItemValue.getValue())) {
					try {
						String sValue = profiloSicurezzaMessaggioSoapHeadersItemValue.getValue();
						SOAPHeader.parse(sValue);
					}catch(Exception e) {
						throw new ProtocolException(PREFIX_VERIFICATO_QUANTO_INDICATO_IN+ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SOAP_HEADERS_SOAP_LABEL+": "+e.getMessage(),e);
					}
				}
				
			}
			
			if(!fruizioni) {
				try {
					ModIDynamicConfigurationKeystoreUtilities.readKeystoreConfig(properties, false);
				}catch(Exception e) {
					throw new ProtocolException("Verificare i parametri indicati per il keystore in "+ModIConsoleCostanti.MODIPA_SICUREZZA_MESSAGGIO_SUBTITLE_LABEL+": "+e.getMessage(),e);
				}
			}
			
			boolean rest = ServiceBinding.REST.equals(api.getServiceBinding());
			boolean digest = ModISecurityUtils.isProfiloSicurezzaMessaggioConIntegrita(api, portType);
			boolean corniceSicurezzaLegacy = false;
			if(corniceSicurezza) {
				corniceSicurezzaLegacy = ModIConsoleCostanti.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_PATTERN_VALUE_OLD.equals(patternDatiCorniceSicurezza);
			}
			boolean headerDuplicati = false;
			if(rest) {
				headerDuplicati = ModISecurityUtils.isProfiloSicurezzaMessaggioConHeaderDuplicati(api, portType);
			}
			boolean requestCalcolatoSuInfoFruizioni = fruizioni;
						
			// Claims
			if(rest) {
				String idProperty = (fruizioni ? ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_JWT_CLAIMS_RICHIESTA_ID : ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_JWT_CLAIMS_RISPOSTA_ID);
				StringProperty profiloSicurezzaMessaggioRestJwtClaimsItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idProperty);
				if(profiloSicurezzaMessaggioRestJwtClaimsItemValue!=null && profiloSicurezzaMessaggioRestJwtClaimsItemValue.getValue()!=null) {
					Properties claims = PropertiesUtilities.convertTextToProperties(profiloSicurezzaMessaggioRestJwtClaimsItemValue.getValue());
					checkClaims(modiProperties, claims, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_JWT_CLAIMS_LABEL, requestCalcolatoSuInfoFruizioni, digest, corniceSicurezzaLegacy);
				}
			}
		
			// Header Duplicati
			if(rest && headerDuplicati) {
				String idProperty = (fruizioni ? ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION_RICHIESTA_ID : ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION_RISPOSTA_ID);
				StringProperty profiloSicurezzaMessaggioRestJwtAuthorizationClaimsItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idProperty);
				if(profiloSicurezzaMessaggioRestJwtAuthorizationClaimsItemValue!=null && profiloSicurezzaMessaggioRestJwtAuthorizationClaimsItemValue.getValue()!=null) {
					Properties claims = PropertiesUtilities.convertTextToProperties(profiloSicurezzaMessaggioRestJwtAuthorizationClaimsItemValue.getValue());
					checkClaims(modiProperties, claims, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_AUTHORIZATION_LABEL, requestCalcolatoSuInfoFruizioni, digest, corniceSicurezzaLegacy);
				}
				
				idProperty = (fruizioni ? ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_MODI_RICHIESTA_ID : ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_MODI_RISPOSTA_ID);
				StringProperty profiloSicurezzaMessaggioRestJwtModiClaimsItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idProperty);
				if(profiloSicurezzaMessaggioRestJwtModiClaimsItemValue!=null && profiloSicurezzaMessaggioRestJwtModiClaimsItemValue.getValue()!=null) {
					Properties claims = PropertiesUtilities.convertTextToProperties(profiloSicurezzaMessaggioRestJwtModiClaimsItemValue.getValue());
					checkClaims(modiProperties, claims, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_JWT_CLAIMS_MODI_LABEL.
							replace(ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_TEMPLATE_HEADER_AGID, modiProperties.getRestSecurityTokenHeaderModI()), 
							requestCalcolatoSuInfoFruizioni, digest, corniceSicurezzaLegacy);
				}
			}
			
			
			// X5U URL
			if(rest) {
				
				String idUrl = null;
				if(fruizioni) {
					idUrl = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_RICHIESTA_X5U_URL_ID;
				}
				else if(!fruizioni) {
					idUrl = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_RISPOSTA_X5U_URL_ID;
				}
				if(idUrl!=null) {
					AbstractConsoleItem<?> profiloSicurezzaMessaggioRestUrlItem = 	
							ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
									idUrl
									);
					if(profiloSicurezzaMessaggioRestUrlItem!=null) {
						
						StringProperty profiloSicurezzaMessaggioRestUrlItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idUrl);
						if(profiloSicurezzaMessaggioRestUrlItemValue!=null && profiloSicurezzaMessaggioRestUrlItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioRestUrlItemValue.getValue())) {
							try {
								InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioRestUrlItemValue.getValue(), ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_REST_X5U_URL_LABEL);
							}catch(Exception e) {
								throw new ProtocolException(e.getMessage(),e);
							}
						}
						
					}
				}
			}
			
			// Audit
			String idAudit = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RICHIESTA_ID;
			String labelAudit = rest ? ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RICHIESTA_REST_LABEL :  ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RICHIESTA_SOAP_LABEL;
			AbstractConsoleItem<?> profiloSicurezzaMessaggioAudienceItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							idAudit
							);
			if(profiloSicurezzaMessaggioAudienceItem!=null) {
				
				StringProperty profiloSicurezzaMessaggioAudienceItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idAudit);
				if(profiloSicurezzaMessaggioAudienceItemValue!=null && profiloSicurezzaMessaggioAudienceItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioAudienceItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioAudienceItemValue.getValue(), labelAudit);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
				
			}
			
			// Audit Risposta
			if(fruizioni) {
				idAudit = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RISPOSTA_VALORE_ID;
				labelAudit = rest ? ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RISPOSTA_REST_LABEL :  ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_AUDIENCE_RISPOSTA_SOAP_LABEL;
				profiloSicurezzaMessaggioAudienceItem = 	
						ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
								idAudit
								);
				if(profiloSicurezzaMessaggioAudienceItem!=null) {
					
					StringProperty profiloSicurezzaMessaggioAudienceItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idAudit);
					if(profiloSicurezzaMessaggioAudienceItemValue!=null && profiloSicurezzaMessaggioAudienceItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioAudienceItemValue.getValue())) {
						try {
							InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioAudienceItemValue.getValue(), labelAudit);
						}catch(Exception e) {
							throw new ProtocolException(e.getMessage(),e);
						}
					}
					
				}
			}

			// Cornice Sicurezza - CodiceEnte
			AbstractConsoleItem<?> profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_ID
							);
			if(profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItem!=null) {
				StringProperty profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_ID);
				if(profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItemValue!=null && profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioCorniceSicurezzaCodiceEnteItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_CODICE_ENTE_MODE_LABEL,
								true); // possono essere presenti spazi all'interno
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// Cornice Sicurezza - UserId
			AbstractConsoleItem<?> profiloSicurezzaMessaggioCorniceSicurezzaUserIdItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_ID
							);
			if(profiloSicurezzaMessaggioCorniceSicurezzaUserIdItem!=null) {
				StringProperty profiloSicurezzaMessaggioCorniceSicurezzaUserIdItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_ID);
				if(profiloSicurezzaMessaggioCorniceSicurezzaUserIdItemValue!=null && profiloSicurezzaMessaggioCorniceSicurezzaUserIdItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioCorniceSicurezzaUserIdItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioCorniceSicurezzaUserIdItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_USER_MODE_LABEL,
								true); // possono essere presenti spazi all'interno
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// Cornice Sicurezza - IPUser
			AbstractConsoleItem<?> profiloSicurezzaMessaggioCorniceSicurezzaIPUserItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_ID
							);
			if(profiloSicurezzaMessaggioCorniceSicurezzaIPUserItem!=null) {
				StringProperty profiloSicurezzaMessaggioCorniceSicurezzaIPUserItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_ID);
				if(profiloSicurezzaMessaggioCorniceSicurezzaIPUserItemValue!=null && profiloSicurezzaMessaggioCorniceSicurezzaIPUserItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioCorniceSicurezzaIPUserItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioCorniceSicurezzaIPUserItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_IP_USER_MODE_LABEL,
								true); // possono essere presenti spazi all'interno
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// Audience Integrity
			if(fruizioni) {
				AbstractConsoleItem<?> profiloSicurezzaMessaggioAudienceIntegrityItem = 	
						ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_INTEGRITY_RICHIESTA_ID
								);
				if(profiloSicurezzaMessaggioAudienceIntegrityItem!=null) {
					StringProperty profiloSicurezzaMessaggioAudienceIntegrityItemValue = 
							(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_INTEGRITY_RICHIESTA_ID);
					if(profiloSicurezzaMessaggioAudienceIntegrityItemValue!=null && profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue())) {
						try {
							InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue(), 
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_LABEL.
									replace(ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_TEMPLATE_HEADER_AGID, modiProperties.getRestSecurityTokenHeaderModI())
									+ " - "+
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_LABEL);
						}catch(Exception e) {
							throw new ProtocolException(e.getMessage(),e);
						}
					}
				}
			}
			// Header Duplicati
			if(rest && headerDuplicati) {
				String idAud = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_INTEGRITY_RICHIESTA_ID;
				AbstractConsoleItem<?> profiloSicurezzaMessaggioAudienceIntegrityItem = 	
						ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
								idAud
								);
				if(profiloSicurezzaMessaggioAudienceIntegrityItem!=null) {
					StringProperty profiloSicurezzaMessaggioAudienceIntegrityItemValue = 
							(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idAud);
					if(profiloSicurezzaMessaggioAudienceIntegrityItemValue!=null && profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue())) {
						try {
							InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue(), 
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_LABEL.
									replace(ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_TEMPLATE_HEADER_AGID, modiProperties.getRestSecurityTokenHeaderModI())
									+ " - "+
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_LABEL);
						}catch(Exception e) {
							throw new ProtocolException(e.getMessage(),e);
						}
					}
				}
				
				idAud = ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_INTEGRITY_RISPOSTA_ID;
				profiloSicurezzaMessaggioAudienceIntegrityItem = 	
						ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
								idAud
								);
				if(profiloSicurezzaMessaggioAudienceIntegrityItem!=null) {
					StringProperty profiloSicurezzaMessaggioAudienceIntegrityItemValue = 
							(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, idAud);
					if(profiloSicurezzaMessaggioAudienceIntegrityItemValue!=null && profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue()!=null && !"".equals(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue())) {
						try {
							InputValidationUtils.validateTextAreaInput(profiloSicurezzaMessaggioAudienceIntegrityItemValue.getValue(), 
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_LABEL.
									replace(ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_SUBSECTION_TEMPLATE_HEADER_AGID, modiProperties.getRestSecurityTokenHeaderModI())
									+ " - "+
									ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_DOPPI_HEADER_AUDIENCE_LABEL);
						}catch(Exception e) {
							throw new ProtocolException(e.getMessage(),e);
						}
					}
				}
				
			}
			
			// Keystore Path
			AbstractConsoleItem<?> keystorePathItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_KEYSTORE_PATH_ID
							);
			if(keystorePathItem!=null) {
				StringProperty keystorePathItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_KEYSTORE_PATH_ID);
				if(keystorePathItemValue!=null && keystorePathItemValue.getValue()!=null && !"".equals(keystorePathItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(keystorePathItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_LABEL +" - "+
								ModIConsoleCostanti.MODIPA_KEYSTORE_PATH_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// Keystore password
			AbstractConsoleItem<?> keystorePasswordItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_KEYSTORE_PASSWORD_ID
							);
			if(keystorePasswordItem!=null) {
				StringProperty keystoreItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_KEYSTORE_PASSWORD_ID);
				if(keystoreItemValue!=null && keystoreItemValue.getValue()!=null && !"".equals(keystoreItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextInput(keystoreItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_LABEL +" - "+
								ModIConsoleCostanti.MODIPA_KEYSTORE_PASSWORD_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// Key password
			AbstractConsoleItem<?> keyPasswordItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_KEY_PASSWORD_ID
							);
			if(keyPasswordItem!=null) {
				StringProperty keystoreItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_KEY_PASSWORD_ID);
				if(keystoreItemValue!=null && keystoreItemValue.getValue()!=null && !"".equals(keystoreItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextInput(keystoreItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_LABEL +" - "+
								ModIConsoleCostanti.MODIPA_KEY_PASSWORD_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			// Key alias
			AbstractConsoleItem<?> keyAliasItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_KEY_ALIAS_ID
							);
			if(keyAliasItem!=null) {
				StringProperty keystoreItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_KEY_ALIAS_ID);
				if(keystoreItemValue!=null && keystoreItemValue.getValue()!=null && !"".equals(keystoreItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextInput(keystoreItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_LABEL +" - "+
								ModIConsoleCostanti.MODIPA_KEY_ALIAS_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// TrustStore Path
			AbstractConsoleItem<?> truststorePathItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH_ID
							);
			if(truststorePathItem!=null) {
				StringProperty truststorePathItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH_ID);
				if(truststorePathItemValue!=null && truststorePathItemValue.getValue()!=null && !"".equals(truststorePathItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(truststorePathItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_CERTIFICATI_TRUSTSTORE_LABEL +" - "+
										ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PATH_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// TrustStore Password
			AbstractConsoleItem<?> truststorePasswordItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD_ID
							);
			if(truststorePasswordItem!=null) {
				StringProperty truststoreItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD_ID);
				if(truststoreItemValue!=null && truststoreItemValue.getValue()!=null && !"".equals(truststoreItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextInput(truststoreItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_CERTIFICATI_TRUSTSTORE_LABEL +" - "+
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// TrustStore CRL
			AbstractConsoleItem<?> truststoreCRLPathItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS_ID
							);
			if(truststoreCRLPathItem!=null) {
				StringProperty truststoreCRLPathItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS_ID);
				if(truststoreCRLPathItemValue!=null && truststoreCRLPathItemValue.getValue()!=null && !"".equals(truststoreCRLPathItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(truststoreCRLPathItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_CERTIFICATI_TRUSTSTORE_LABEL +" - "+
										ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_CRLS_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
			
			// TrustStore Path (SSL)
			truststorePathItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH_ID
							);
			if(truststorePathItem!=null) {
				StringProperty truststorePathItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH_ID);
				if(truststorePathItemValue!=null && truststorePathItemValue.getValue()!=null && !"".equals(truststorePathItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(truststorePathItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_SSL_TRUSTSTORE_LABEL +" - "+
										ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PATH_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}
						
			// TrustStore CRL (SSL)
			truststoreCRLPathItem = 	
					ProtocolPropertiesUtils.getAbstractConsoleItem(consoleConfiguration.getConsoleItem(),
							ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS_ID
							);
			if(truststoreCRLPathItem!=null) {
				StringProperty truststoreCRLPathItemValue = 
						(StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS_ID);
				if(truststoreCRLPathItemValue!=null && truststoreCRLPathItemValue.getValue()!=null && !"".equals(truststoreCRLPathItemValue.getValue())) {
					try {
						InputValidationUtils.validateTextAreaInput(truststoreCRLPathItemValue.getValue(), 
								ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_SSL_TRUSTSTORE_LABEL +" - "+
										ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_CRLS_LABEL);
					}catch(Exception e) {
						throw new ProtocolException(e.getMessage(),e);
					}
				}
			}

		}
		
		// validazione dati OAuth se forniti

		StringProperty tokenIdentificativoClientItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO_ID);
		if(tokenIdentificativoClientItemValue!=null && tokenIdentificativoClientItemValue.getValue()!=null && StringUtils.isNotEmpty(tokenIdentificativoClientItemValue.getValue())) {
			try {
				InputValidationUtils.validateTextAreaInput(tokenIdentificativoClientItemValue.getValue(), 
						ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_OAUTH_IDENTIFICATIVO_LABEL);
			}catch(Exception e) {
				throw new ProtocolException(e.getMessage(),e);
			}
		}
		
		StringProperty tokenKidItemValue = (StringProperty) ProtocolPropertiesUtils.getAbstractPropertyById(properties, ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_OAUTH_KID_ID);
		if(tokenKidItemValue!=null && tokenKidItemValue.getValue()!=null && StringUtils.isNotEmpty(tokenKidItemValue.getValue())) {
			try {
				InputValidationUtils.validateTextAreaInput(tokenKidItemValue.getValue(), 
						ModIConsoleCostanti.MODIPA_API_IMPL_PROFILO_SICUREZZA_OAUTH_KID_LABEL);
			}catch(Exception e) {
				throw new ProtocolException(e.getMessage(),e);
			}
		}

		
		
		return true;
	}
	
	private static void checkClaims(ModIProperties modiProperties,
			Properties claims, String elemento, boolean request, boolean digest, boolean corniceSicurezzaLegacy) throws ProtocolException {
		List<String> denyClaims = null;
		String claimNameClientId = null;
		try {
			denyClaims = modiProperties.getUsedRestSecurityClaims(request, digest);
			claimNameClientId = modiProperties.getRestSecurityTokenClaimsClientIdHeader();
		}catch(Exception e) {
			throw new ProtocolException(e.getMessage(),e);
		}
		if(claims!=null && !claims.isEmpty()) {
			for (Object oClaim : claims.keySet()) {
				if(oClaim instanceof String) {
					String claim = (String) oClaim;
					String value = claims.getProperty(claim);
					
					String debugS = "'"+claim+"', indicato nel campo "+elemento;
					
					if(value!=null &&  DynamicHelperCostanti.NOT_GENERATE.equalsIgnoreCase(value.trim())) {
						if(claim.equalsIgnoreCase(claimNameClientId) || 
								(claim.equalsIgnoreCase(Claims.INTROSPECTION_RESPONSE_RFC_7662_ISSUER) && !corniceSicurezzaLegacy) ||
								(claim.equalsIgnoreCase(Claims.INTROSPECTION_RESPONSE_RFC_7662_SUBJECT) && !corniceSicurezzaLegacy)
							) {
							continue;
						}
						else {
							throw new ProtocolException("Keyword '"+DynamicHelperCostanti.NOT_GENERATE+"' non utilizzabile nel claim "+debugS);
						}
					}
					if(denyClaims.contains(claim) || denyClaims.contains(claim.toLowerCase())) {
						throw new ProtocolException("Il claim "+debugS+", non può essere configurato");
					}
					if(value==null || StringUtils.isEmpty(value)) {
						throw new ProtocolException("Claim "+debugS+", non valorizzato");
					}
				}
			}
		}
	}
	
	private static boolean isMascheraGestioneFruizioneOrErogazione(IConsoleHelper consoleHelper) {
		boolean gestioneFruitori = isMascheraGestioneFruizione(consoleHelper);
		boolean gestioneErogatori = isMascheraGestioneErogazione(consoleHelper);
		return gestioneErogatori || gestioneFruitori;
	}
	
	private static boolean isMascheraGestioneErogazione(IConsoleHelper consoleHelper) {
		String tipologia = consoleHelper.getAttributeFromSession(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE, String.class);
		if(tipologia == null) {
			try {
				String p = consoleHelper.getParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM);
				if(p!=null) {
					tipologia = p;
				}
			}catch(Exception e) {
				// ignore
			}
		}
		return tipologia!=null &&
			Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE.equals(tipologia);
	}
	private static boolean isMascheraGestioneFruizione(IConsoleHelper consoleHelper) {
		String tipologia = consoleHelper.getAttributeFromSession(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE, String.class);
		if(tipologia == null) {
			try {
				String p = consoleHelper.getParameter(Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VIA_PARAM);
				if(p!=null) {
					tipologia = p;
				}
			}catch(Exception e) {
				// ignore
			}
		}
		return tipologia!=null &&
			Costanti.CONSOLE_PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE.equals(tipologia);
	}
}